{"slug":"portfolio-analysis-from-the-free-sql-api","qid":"pair_correlation","label":"Pairwise daily return correlation, trailing year","post_title":"Portfolio Analysis in SQL: Weights to Drawdown","post_url":"/blog/portfolio-analysis-from-the-free-sql-api#q-pair_correlation","columns":["pair","correlation"],"rows":[{"pair":"JNJ / KO","correlation":0.385},{"pair":"MSFT / NVDA","correlation":0.255},{"pair":"AAPL / KO","correlation":0.142},{"pair":"AAPL / MSFT","correlation":0.137},{"pair":"KO / XOM","correlation":0.127},{"pair":"JNJ / XOM","correlation":0.113},{"pair":"AAPL / NVDA","correlation":0.091},{"pair":"AAPL / JNJ","correlation":0.089},{"pair":"AAPL / XOM","correlation":-0.092},{"pair":"KO / MSFT","correlation":-0.099},{"pair":"MSFT / XOM","correlation":-0.132},{"pair":"NVDA / XOM","correlation":-0.195},{"pair":"JNJ / NVDA","correlation":-0.214},{"pair":"JNJ / MSFT","correlation":-0.241},{"pair":"KO / NVDA","correlation":-0.291}],"shape":"ranking","sql":"WITH px AS\n(\n    SELECT\n        ticker,\n        date,\n        max(toFloat64(close)) AS close\n    FROM global_markets.stocks_daily_aggs\n    WHERE ticker IN ('AAPL', 'MSFT', 'NVDA', 'KO', 'JNJ', 'XOM')\n      AND date >= today() - 420\n      AND date <  today()\n    GROUP BY ticker, date\n),\nrets AS\n(\n    SELECT\n        ticker,\n        date,\n        close / lagInFrame(close) OVER (PARTITION BY ticker ORDER BY date\n              ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) - 1 AS ret\n    FROM px\n)\nSELECT\n    concat(a.ticker, ' / ', b.ticker) AS pair,\n    round(corr(a.ret, b.ret), 3)      AS correlation\nFROM rets AS a\nINNER JOIN rets AS b ON a.date = b.date\nWHERE a.ticker < b.ticker\n  AND a.date >= today() - 365\n  AND isFinite(a.ret)\n  AND isFinite(b.ret)\nGROUP BY pair\nORDER BY correlation DESC","computed_at":"2026-10-07T15:11:30.593716+00:00","elapsed":0.533837837}