WITH beers_intensity AS (
SELECT
*,
3 * abv + log10(ibu) / 3 AS "intensity"
FROM beer
),
beer_zscore AS (
SELECT
*,
COALESCE((intensity - avg(intensity) OVER(w))
/ stddev_samp(intensity) OVER(w), 0)
AS "zscore",
rank() OVER(PARTITION BY style ORDER BY intensity DESC) AS rank,
count() OVER(w) AS count
FROM beers_intensity
WINDOW w AS (PARTITION BY style)
ORDER BY zscore DESC
)
SELECT name, style, abv, ibu, zscore
FROM beer_zscore
WHERE rank = 1 AND count > 20