SQL中的合并行计数
目前我有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
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”。。。不太好,但它会起作用关于各种数据库支持选项的说明可能是一个很好的补充,我不想添加。