SQL中的合并行计数

SQL中的合并行计数,sql,Sql,目前我有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的计数组合起来?使用大小写表达式: select case lower(gend

目前我有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的计数组合起来?

使用
大小写表达式:

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()
来检查
gender
是否为
null

某些数据库支持
group by
子句中的位置参数,因此您可以执行以下操作:

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

group by new_gender

当然,你只需要列出这将如何发生。这可以使用函数或case语句来完成

case语句是一次性查询的一个很好的解决方案,但如果您要将其扩展到多个查询,我建议使用转换表或函数

选择
案例
当较低(性别)=“f”或较低(性别)=“女性”
然后是“女性”
较低(性别)=“m”或较低(性别)=“男性”
然后是“男性”
以清洁结束
,计数(*)作为性别计数
从…起
...
哪里
性别不是空的
分组
案例
当较低(性别)=“f”或较低(性别)=“女性”
然后是“女性”
较低(性别)=“m”或较低(性别)=“男性”
然后是“男性”
结束

根据您的RDBM,您可以获取性别的子字符串,仅第一个字符,
它将分组在“f”,“m”,“u”。。。不太好,但它会起作用

关于各种数据库支持选项的说明可能是一个很好的补充,我不想添加。