{"slug":"return-of-capital-in-etf-distributions","qid":"payout_rates","label":"Trailing year distribution rate, price change, and approximate total return","post_title":"Return of Capital in ETF Distributions","post_url":"/blog/return-of-capital-in-etf-distributions#q-payout_rates","columns":["ticker","distribution_rate_pct","price_change_pct","approx_total_return_pct"],"rows":[{"ticker":"QYLD","distribution_rate_pct":12.5,"price_change_pct":7.6,"approx_total_return_pct":20.1},{"ticker":"RYLD","distribution_rate_pct":12.5,"price_change_pct":10.1,"approx_total_return_pct":22.5},{"ticker":"JEPQ","distribution_rate_pct":11.8,"price_change_pct":7.9,"approx_total_return_pct":19.7},{"ticker":"XYLD","distribution_rate_pct":11.1,"price_change_pct":6.2,"approx_total_return_pct":17.3},{"ticker":"JEPI","distribution_rate_pct":8.2,"price_change_pct":3.2,"approx_total_return_pct":11.4},{"ticker":"SCHD","distribution_rate_pct":3.9,"price_change_pct":30.6,"approx_total_return_pct":34.5},{"ticker":"SPY","distribution_rate_pct":1.2,"price_change_pct":20.5,"approx_total_return_pct":21.7}],"shape":"ranking","sql":"WITH divs AS\n(\n    SELECT\n        ticker,\n        sum(cash_amount) AS paid_12m\n    FROM\n    (\n        SELECT\n            ticker,\n            ex_dividend_date,\n            toFloat64(max(cash_amount)) AS cash_amount\n        FROM global_markets.stocks_dividends\n        WHERE ticker IN ('JEPI', 'JEPQ', 'QYLD', 'XYLD', 'RYLD', 'SCHD', 'SPY')\n          AND ex_dividend_date >= today() - 373\n          AND ex_dividend_date <  today() - 5\n        GROUP BY ticker, ex_dividend_date\n    )\n    GROUP BY ticker\n),\npx AS\n(\n    SELECT\n        ticker,\n        toFloat64(argMin(close, window_start)) AS price_then,\n        toFloat64(argMax(close, window_start)) AS price_now\n    FROM global_markets.delayed_stocks_minute_aggs\n    WHERE ticker IN ('JEPI', 'JEPQ', 'QYLD', 'XYLD', 'RYLD', 'SCHD', 'SPY')\n      AND (\n            (window_start >= now() - INTERVAL 375 DAY AND window_start < now() - INTERVAL 368 DAY)\n         OR (window_start >= now() - INTERVAL 9 DAY   AND window_start < now() - INTERVAL 2 DAY)\n          )\n      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60\n           + toMinute(toTimeZone(window_start, 'America/New_York'))) >= 570\n      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60\n           + toMinute(toTimeZone(window_start, 'America/New_York'))) < 960\n    GROUP BY ticker\n)\nSELECT\n    px.ticker                                                          AS ticker,\n    round(100 * divs.paid_12m / px.price_then, 1)                      AS distribution_rate_pct,\n    round(100 * (px.price_now / px.price_then - 1), 1)                 AS price_change_pct,\n    round(100 * ((px.price_now + divs.paid_12m) / px.price_then - 1), 1) AS approx_total_return_pct\nFROM px\nINNER JOIN divs ON divs.ticker = px.ticker\nORDER BY distribution_rate_pct DESC","computed_at":"2026-08-22T04:18:32.420860+00:00","elapsed":0.817947112}