我需要按某个类别进行分组的 SQL 查询,该查询仅显示总共包含所有类别的至少 80% 的那些组的数量,其他稀有类别(最多占总数的 20%)应表示为“其他”。
因此,按类别颜色对苹果进行分组的查询结果应如下所示:
RED 1118 44% )
YELLOW 711 28% > at least 80%
GREEN 229 9% )
other 482 19%
怎么做?
我会结合聚合和分析函数来做到这一点。当最稀有颜色的累积总和低于 20% 时,颜色被归入“其他”类别:
select (case when cumcntdesc < totalcnt * 0.2 then 'other'
else color
end) as color, sum(cnt) as cnt
from (select color, count(*) as cnt,
sum(count(*)) over (order by count(*) asc) as cumcntdesc,
sum(count(*)) over () as totalcnt
from t
group by color
) t
group by (case when cumcntdesc < totalcnt * 0.2 then 'other'
else color
end)
这是一个 SQL 小提琴。