{"slug":"what-is-short-interest","qid":"pct_buckets","label":"How liquid US stocks distribute by short interest as a percent of shares outstanding","post_title":"What Is FINRA Short Interest? Days to Cover","post_url":"/blog/what-is-short-interest#q-pct_buckets","columns":["short_pct_bucket","tickers","pct_of_tickers","median_days_to_cover"],"rows":[{"short_pct_bucket":"Under 2%","tickers":172,"pct_of_tickers":13,"median_days_to_cover":2.37},{"short_pct_bucket":"2-5%","tickers":382,"pct_of_tickers":28.8,"median_days_to_cover":3.36},{"short_pct_bucket":"5-10%","tickers":401,"pct_of_tickers":30.2,"median_days_to_cover":4.67},{"short_pct_bucket":"10-20%","tickers":272,"pct_of_tickers":20.5,"median_days_to_cover":6.22},{"short_pct_bucket":"20%+","tickers":101,"pct_of_tickers":7.6,"median_days_to_cover":7.4}],"shape":"ranking","sql":"WITH (SELECT max(settlement_date) FROM global_markets.stocks_short_interest) AS latest,\nsi AS\n(\n    SELECT ticker,\n           max(short_interest) AS shares_short,\n           max(avg_daily_volume) AS adv,\n           max(days_to_cover) AS dtc\n    FROM global_markets.stocks_short_interest\n    WHERE settlement_date = latest\n    GROUP BY ticker\n    HAVING adv >= 1000000\n),\nshares AS\n(\n    SELECT tk AS ticker,\n           argMax(basic_shares_outstanding, (filing_date, period_end)) AS shares_out\n    FROM global_markets.stocks_income_statements\n    ARRAY JOIN tickers AS tk\n    WHERE timeframe = 'quarterly'\n      AND filing_date >= today() - INTERVAL 9 MONTH\n      AND basic_shares_outstanding > 0\n    GROUP BY tk\n    HAVING shares_out >= 10000000\n),\njoined AS\n(\n    SELECT si.ticker AS ticker,\n           100.0 * si.shares_short / shares.shares_out AS short_pct,\n           si.dtc AS dtc\n    FROM si\n    INNER JOIN shares ON si.ticker = shares.ticker\n    WHERE 100.0 * si.shares_short / shares.shares_out <= 50\n)\nSELECT multiIf(short_pct < 2, 'Under 2%',\n               short_pct < 5, '2-5%',\n               short_pct < 10, '5-10%',\n               short_pct < 20, '10-20%',\n               '20%+') AS short_pct_bucket,\n       count() AS tickers,\n       round(100.0 * count() / sum(count()) OVER (), 1) AS pct_of_tickers,\n       round(quantileExact(0.5)(dtc), 2) AS median_days_to_cover\nFROM joined\nGROUP BY short_pct_bucket\nORDER BY min(short_pct)","computed_at":"2026-08-22T04:34:51.234202+00:00","elapsed":0.993268807}