0

我需要按某个类别进行分组的 SQL 查询,该查询仅显示总共包含所有类别的至少 80% 的那些组的数量,其他稀有类别(最多占总数的 20%)应表示为“其他”。

因此,按类别颜色对苹果进行分组的查询结果应如下所示:

RED    1118 44% )
YELLOW  711 28% > at least 80%
GREEN   229  9% )
other   482 19%

怎么做?

4

1 回答 1

0

我会结合聚合和分析函数来做到这一点。当最稀有颜色的累积总和低于 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 小提琴。

于 2013-07-31T13:27:49.833 回答