首页 > 解决方案 > 在 SQL 中合并行 COUNTS

问题描述

目前我在 sql 中有数据,需要合并行中的计数。

我的代码是:

WHERE lower(GENDER) IS NOT NULL 
GROUP BY lower(GENDER)

它的表格如下:

Gender    Count
female    100 
f         101
male      102 
m         103
unknown   104

有没有办法将女性和 f 的计数组合起来,然后同样从男性和 m 组合起来?

标签: sql

解决方案


使用case表达式:

select
    case lower(gender)
        when 'f' then 'female'
        when 'm' then 'male'
        else lower(gender)
    end new_gender,
    count(*) cnt
from mytable
where gender is not null
group by case lower(gender)
        when 'f' then 'female'
        when 'm' then 'male'
        else lower(gender)
    end

请注意,您不需要lower()检查 if genderis null

一些数据库支持group by子句中的位置参数,所以你可以这样做:

group by 1

其他数据库支持重新使用select子句中定义的别名:

group by new_gender

推荐阅读