{"slug":"stock-correlation-matrix-from-the-free-sql-api","qid":"corr_matrix","label":"Pairwise correlation of daily returns, six large caps, Oct 2025 to Sep 2026","post_title":"Stock Correlation Matrix in One SQL Query","post_url":"/blog/stock-correlation-matrix-from-the-free-sql-api#q-corr_matrix","columns":["pair","return_corr"],"rows":[{"pair":"KO / PG","return_corr":0.524},{"pair":"MSFT / NVDA","return_corr":0.249},{"pair":"AAPL / PG","return_corr":0.174},{"pair":"AAPL / KO","return_corr":0.144},{"pair":"AAPL / MSFT","return_corr":0.135},{"pair":"KO / XOM","return_corr":0.13},{"pair":"AAPL / NVDA","return_corr":0.093},{"pair":"PG / XOM","return_corr":-0.042},{"pair":"AAPL / XOM","return_corr":-0.092},{"pair":"KO / MSFT","return_corr":-0.1},{"pair":"MSFT / XOM","return_corr":-0.128},{"pair":"MSFT / PG","return_corr":-0.129},{"pair":"NVDA / XOM","return_corr":-0.198},{"pair":"NVDA / PG","return_corr":-0.229},{"pair":"KO / NVDA","return_corr":-0.292}],"shape":"ranking","sql":"WITH\n    daily AS\n    (\n        SELECT\n            ticker,\n            date,\n            toFloat64(close) AS px,\n            lagInFrame(toFloat64(close), 1) OVER (\n                PARTITION BY ticker ORDER BY date\n                ROWS BETWEEN 1 PRECEDING AND CURRENT ROW\n            ) AS prev_px\n        FROM global_markets.stocks_daily_aggs\n        WHERE ticker IN ('AAPL', 'MSFT', 'NVDA', 'XOM', 'KO', 'PG')\n          AND date >= '2025-10-01'\n          AND date <  '2026-10-01'\n    ),\n    rets AS\n    (\n        SELECT\n            ticker,\n            date,\n            px / prev_px - 1 AS ret\n        FROM daily\n        WHERE prev_px > 0\n    )\nSELECT\n    concat(a.ticker, ' / ', b.ticker) AS pair,\n    round(corr(a.ret, b.ret), 3)      AS return_corr\nFROM rets AS a\nINNER JOIN rets AS b ON a.date = b.date\nWHERE a.ticker < b.ticker\nGROUP BY pair\nORDER BY return_corr DESC","computed_at":"2026-10-06T16:07:26.877523+00:00","elapsed":0.004485263}