如何编写单个SQL查询以使用几个有关功能数量和功能优先级的条件来选择一个子组

时间:2018-06-30 12:36:29

标签: sql

我有这个table

enter image description here

我需要得到这个table

enter image description here

一个类应对应一个id。该类的选择如下:

  1. 选择最常见的id class(例如,id 222对应于类C)。
  2. 如果类别数相等(如id 111),则根据优先级系统选择类别(B越好C,C越好A)。

提前谢谢!

1 个答案:

答案 0 :(得分:0)

在大多数数据库中,您可以使用row_number()

select ic.*
from (select id, class, count(*) as cnt,
             row_number() over (partition by id
                                order by count(*) desc,
                                         (case class when 'B' then 1 when 'C' then 2 when 'A' then 3 else 4 end)
                               ) as seqnum
      from t
      group by id, class
     ) ic
where seqnum = 1;