payout_vs_total
Answered against 22 years of US equities and 12 years of US options data and published with the query that produced it. This result is stored as of 2026-10-05, from what-is-total-payout-ratio.
| ticker | dividend_payout_pct | total_payout_pct |
|---|---|---|
| AAPL | 13.1 | 80.3 |
| KO | 77 | 77 |
| CSCO | 58.6 | 71.3 |
| HD | 56.9 | 56.9 |
| JNJ | 46.2 | 46.2 |
| MSFT | 21.2 | 24.3 |
- Rows × columns
- 6 × 3
- Computed
- Completeness
- No missing values
- Source
- US exchange, SIP and OPRA market data
- Licence
- Strasmore terms · free, no signup
What each column holds
| Column | Type | Range | Notes |
|---|---|---|---|
ticker |
text | 6 distinct values (AAPL, CSCO, HD…) | |
dividend_payout_pct |
number | 13.1 to 77 | percent |
total_payout_pct |
number | 24.3 to 80.3 | percent |
Computed from Strasmore's warehouse of US exchange, SIP and OPRA market data. Equity prices are delayed; options greeks and implied volatility are end-of-day. This result is stored, not recomputed on load — it is exactly the numbers that were returned on , and the query below is what returned them.
Run it yourself
This is the exact query behind the result above. Change a ticker, a date or a column and run it against the warehouse — no account, no key. The no-signup tier is smaller than the one this page was computed on; a query that reaches past it comes back saying which plan runs it.
WITH
cash_rows AS
(
SELECT
ticker,
period_end,
argMax(dividend_cash, (filing_date, period_end)) AS dividend_cash,
argMax(net_income, (filing_date, period_end)) AS net_income
FROM
(
SELECT
arrayJoin(tickers) AS ticker,
period_end,
filing_date,
abs(toFloat64(dividends)) AS dividend_cash,
toFloat64(net_income) AS net_income
FROM global_markets.stocks_cash_flow_statements
WHERE hasAny(tickers, ['AAPL', 'MSFT', 'HD', 'CSCO', 'KO', 'JNJ'])
AND timeframe = 'quarterly'
AND period_end >= '2022-01-01'
)
WHERE ticker IN ('AAPL', 'MSFT', 'HD', 'CSCO', 'KO', 'JNJ')
GROUP BY ticker, period_end
),
ranked AS
(
SELECT
ticker,
period_end,
dividend_cash,
net_income,
row_number() OVER (PARTITION BY ticker ORDER BY period_end DESC) AS rn
FROM cash_rows
),
trailing_year AS
(
SELECT
ticker,
sum(dividend_cash) AS dividend_cash,
sum(net_income) AS net_income,
min(period_end) AS win_start,
max(period_end) AS win_end
FROM ranked
WHERE rn <= 4
GROUP BY ticker
HAVING count() = 4
),
share_counts AS
(
SELECT
i.ticker AS ticker,
argMin(i.diluted_shares, i.period_end) AS shares_before,
argMax(i.diluted_shares, i.period_end) AS shares_latest
FROM
(
SELECT
arrayJoin(tickers) AS ticker,
period_end,
toFloat64(diluted_shares_outstanding) AS diluted_shares
FROM global_markets.stocks_income_statements
WHERE hasAny(tickers, ['AAPL', 'MSFT', 'HD', 'CSCO', 'KO', 'JNJ'])
AND timeframe = 'quarterly'
AND diluted_shares_outstanding > 0
AND period_end >= '2022-01-01'
) AS i
INNER JOIN trailing_year AS y ON i.ticker = y.ticker
WHERE i.ticker IN ('AAPL', 'MSFT', 'HD', 'CSCO', 'KO', 'JNJ')
AND toDate(i.period_end) > subtractDays(toDate(y.win_start), 100)
AND toDate(i.period_end) <= toDate(y.win_end)
GROUP BY i.ticker
),
avg_prices AS
(
SELECT
d.ticker AS ticker,
avg(toFloat64(d.close)) AS avg_close
FROM global_markets.stocks_daily_aggs AS d
INNER JOIN trailing_year AS y ON d.ticker = y.ticker
WHERE d.ticker IN ('AAPL', 'MSFT', 'HD', 'CSCO', 'KO', 'JNJ')
AND d.date > subtractDays(toDate(y.win_start), 100)
AND d.date <= toDate(y.win_end)
GROUP BY d.ticker
)
SELECT
y.ticker AS ticker,
round(y.dividend_cash / y.net_income * 100, 1) AS dividend_payout_pct,
round((y.dividend_cash + greatest(s.shares_before - s.shares_latest, 0) * p.avg_close) / y.net_income * 100, 1) AS total_payout_pct
FROM trailing_year AS y
INNER JOIN share_counts AS s USING (ticker)
INNER JOIN avg_prices AS p USING (ticker)
WHERE y.net_income > 0
ORDER BY total_payout_pct DESC
このデータをAIアシスタントで使う
このページのデータで、すぐにクエリできる状態で開きます。無料、アカウント不要。