SQL条件分组

时间:2019-04-24 10:05:30

标签: sql oracle

想象一下,我有一个如下表:

ID    Score    someOtherColumns
 1        1    ....
 2        1    .....
 3        4    ....
 5        2    ....
 6        1    ....

其中score的整数值可以在0到100之间。我想按分数分组,可以用以下方法完成:

Select score, count(*) from myTable group by score;

如果要在一个组中将得分> 20分组,该如何在组中添加条件?

我尝试过:

Select score, count(*) from myTable
group by 
  case 
    when score >19 then 20
    else score
  end;

但是得到一个“不是GROUP BY表达式”

2 个答案:

答案 0 :(得分:2)

case部分包装为派生表(子查询)。 GROUP BY其结果。

select score, count(*)
from
(
    select case 
             when score >19 then 20
             else score
           end as score
    from myTable
) dt
group by score

通过这种方式,您无需重复case表达式,即不易出错。

答案 1 :(得分:1)

您需要使用SELECT语句重复相同的表达式:

Select (case when score > 19 then 20 else score end) as score, count(*) 
from myTable
group by (case when score > 19 then 20 else score end);