{"slug":"dividends-vs-buybacks-shareholder-yield","qid":"shareholder_yield","label":"Dividend yield, buyback yield and total shareholder yield","post_title":"Dividends vs Buybacks: Shareholder Yield","post_url":"/blog/dividends-vs-buybacks-shareholder-yield#q-shareholder_yield","columns":["ticker","dividend_yield_pct","buyback_yield_pct","shareholder_yield_pct"],"rows":[{"ticker":"PEP","dividend_yield_pct":4.16,"buyback_yield_pct":0.29,"shareholder_yield_pct":4.45},{"ticker":"HD","dividend_yield_pct":2.65,"buyback_yield_pct":-0.2,"shareholder_yield_pct":2.45},{"ticker":"KO","dividend_yield_pct":2.4,"buyback_yield_pct":0.05,"shareholder_yield_pct":2.44},{"ticker":"CSCO","dividend_yield_pct":1.36,"buyback_yield_pct":0.35,"shareholder_yield_pct":1.71}],"shape":"ranking","sql":"SELECT\n    d.ticker                                                            AS ticker,\n    round(100 * d.ttm_dividend / p.price, 2)                            AS dividend_yield_pct,\n    round(100 * (s.shares_prior - s.shares_recent) / s.shares_prior, 2) AS buyback_yield_pct,\n    round(100 * d.ttm_dividend / p.price\n        + 100 * (s.shares_prior - s.shares_recent) / s.shares_prior, 2) AS shareholder_yield_pct\nFROM\n(\n    SELECT\n        ticker,\n        toFloat64(sum(amount)) AS ttm_dividend\n    FROM\n    (\n        SELECT\n            ticker,\n            id,\n            any(cash_amount) AS amount\n        FROM global_markets.stocks_dividends\n        WHERE ticker IN ('AAPL', 'MSFT', 'KO', 'PEP', 'CVX', 'CSCO', 'HD', 'JNJ')\n          AND frequency > 0\n          AND ex_dividend_date > today() - 365\n          AND ex_dividend_date <= today()\n        GROUP BY ticker, id\n    )\n    GROUP BY ticker\n) AS d\nINNER JOIN\n(\n    SELECT\n        ticker,\n        toFloat64(argMax(close, date)) AS price\n    FROM global_markets.stocks_daily_aggs\n    WHERE ticker IN ('AAPL', 'MSFT', 'KO', 'PEP', 'CVX', 'CSCO', 'HD', 'JNJ')\n      AND date > today() - 30\n    GROUP BY ticker\n) AS p ON p.ticker = d.ticker\nINNER JOIN\n(\n    SELECT\n        arrayJoin(tickers) AS ticker,\n        argMaxIf(toFloat64(diluted_shares_outstanding), period_end, period_end > today() - 200)  AS shares_recent,\n        argMaxIf(toFloat64(diluted_shares_outstanding), period_end, period_end <= today() - 365) AS shares_prior\n    FROM global_markets.stocks_income_statements\n    WHERE timeframe = 'quarterly'\n      AND diluted_shares_outstanding > 0\n      AND period_end > today() - 800\n      AND hasAny(tickers, ['AAPL', 'MSFT', 'KO', 'PEP', 'CVX', 'CSCO', 'HD', 'JNJ'])\n    GROUP BY ticker\n    HAVING ticker IN ('AAPL', 'MSFT', 'KO', 'PEP', 'CVX', 'CSCO', 'HD', 'JNJ')\n       AND countIf(period_end > today() - 200) > 0\n       AND countIf(period_end <= today() - 365) > 0\n) AS s ON s.ticker = d.ticker\nORDER BY shareholder_yield_pct DESC","computed_at":"2026-08-08T14:53:20.649429+00:00","elapsed":0.150255181}