S&P 500 Dividend Yield: How It's Measured
Trailing twelve month distribution yields: broad index, equal weight, dividend screens, sector fundstable ·
2026-08-22 · 9×6
SPY distributions per share and price, both rebased to 100 at 2015ranking ·
2026-08-22 · 11×3
Tracker distribution yield vs the 10 year Treasury, calendar year ends 2015-2025table ·
2026-08-22 · 11×5
Cap weighted vs equal weighted dividend yield, by company sizetable ·
2026-08-22 · 5×6
Trailing twelve month distribution yields: broad index, equal weight, dividend screens, sector funds
Trailing twelve month distribution yields: broad index, equal weight, dividend screens, sector funds
| ticker | segment | price | ttm_distributions_usd | payments | trailing_yield_pct |
|---|---|---|---|---|---|
| SPY | broad index tracker | 766.95 | 7.525 | 4 | 0.98 |
| RSP | equal weight S&P 500 | 221.91 | 3.205 | 4 | 1.44 |
| VYM | dividend screen | 165.11 | 3.63 | 4 | 2.2 |
| SCHD | dividend screen | 35.2 | 1.048 | 4 | 2.98 |
| SPYD | dividend screen | 50.39 | 2.031 | 4 | 4.03 |
| XLU | sector fund | 42.82 | 1.479 | 4 | 3.45 |
| XLP | sector fund | 86.05 | 2.197 | 4 | 2.55 |
| XLRE | sector fund | 45.07 | 1.405 | 4 | 3.12 |
| XLK | sector fund | 183.58 | 0.972 | 4 | 0.53 |
the exact SQL behind every number
WITH px AS (
SELECT ticker,
argMax(close, window_start) AS price
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY', 'RSP', 'VYM', 'SCHD', 'SPYD', 'XLU', 'XLP', 'XLRE', 'XLK')
AND window_start >= now() - INTERVAL 7 DAY
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY ticker
),
dv AS (
SELECT ticker,
sum(cash_amount) AS ttm_distributions,
count() AS payments
FROM global_markets.stocks_dividends
WHERE ticker IN ('SPY', 'RSP', 'VYM', 'SCHD', 'SPYD', 'XLU', 'XLP', 'XLRE', 'XLK')
AND ex_dividend_date > today() - INTERVAL 1 YEAR
AND ex_dividend_date <= today()
AND cash_amount > 0
GROUP BY ticker
)
SELECT px.ticker AS ticker,
multiIf(px.ticker = 'SPY', 'broad index tracker',
px.ticker = 'RSP', 'equal weight S&P 500',
px.ticker IN ('VYM', 'SCHD', 'SPYD'), 'dividend screen',
'sector fund') AS segment,
round(px.price, 2) AS price,
round(dv.ttm_distributions, 3) AS ttm_distributions_usd,
dv.payments AS payments,
round(dv.ttm_distributions / px.price * 100, 2) AS trailing_yield_pct
FROM px
INNER JOIN dv ON px.ticker = dv.ticker
ORDER BY multiIf(px.ticker = 'SPY', 1,
px.ticker = 'RSP', 2,
px.ticker = 'VYM', 3,
px.ticker = 'SCHD', 4,
px.ticker = 'SPYD', 5,
px.ticker = 'XLU', 6,
px.ticker = 'XLP', 7,
px.ticker = 'XLRE', 8,
9)
More from this analysisS&P 500 Dividend Yield: How It's Measured
Tracker distribution yield vs the 10 year Treasury, calendar year ends 2015-2025
table 11×5
→
Cap weighted vs equal weighted dividend yield, by company size
table 5×6
→
SPY distributions per share and price, both rebased to 100 at 2015
ranking 11×3
→
Monthly dividend stocks - filing companies paying every month, ranked by daily traded value
table 29×6
→
See all 2,170 queries →