STRASMORE/EXPLORE 3,094 QUERIES

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.

as of ranking 6×3read in context →
payout_vs_total — 6 rows by 3 columns, computed from US exchange, SIP and OPRA data.
tickerdividend_payout_pcttotal_payout_pct
AAPL13.180.3
KO7777
CSCO58.671.3
HD56.956.9
JNJ46.246.2
MSFT21.224.3
Rows × columns
6 × 3
Computed
Completeness
No missing values
Source
US exchange, SIP and OPRA market data
Licence
Strasmore terms · free, no signup
Formats
JSON · CSV · the SQL below

What each column holds

Column definitions for payout_vs_total, derived from the stored result.
ColumnTypeRangeNotes
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
⌘/Ctrl + Enter

Work with this data in your AI assistant

Opens ready to query, with this page's data. Free, no account.