目前我有sql中的数据,需要合并行中的计数。我的代码是:
WHERE lower(GENDER) IS NOT NULL GROUP BY lower(GENDER)
WHERE lower(GENDER) IS NOT NULL
GROUP BY lower(GENDER)
它摆出一张table,像:
Gender Countfemale 100 f 101male 102 m 103unknown 104
Gender Count
female 100
f 101
male 102
m 103
unknown 104
有没有办法把雌性和f的计数结合起来,然后把雄性和m的计数结合起来?
li9yvcax1#
使用 case 表达式:
case
select case lower(gender) when 'f' then 'female' when 'm' then 'male' else lower(gender) end new_gender, count(*) cntfrom mytablewhere gender is not nullgroup by case lower(gender) when 'f' then 'female' when 'm' then 'male' else lower(gender) end
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)
end
请注意,您不需要 lower() 检查是否 gender 是 null .某些数据库支持中的位置参数 group by 子句,所以您可以:
lower()
gender
null
group by
group by 1
其他数据库支持重新使用中定义的别名 select 条款:
group by new_gender
vh0rcniy2#
当然,你只需要列出这是怎么发生的。这可以使用函数或case语句来完成。case语句是一次性查询的一个很好的解决方案,但是如果您要在多个查询中扩展它,我建议使用转换表或函数。
select case when lower(gender) = 'f' or lower(gender) = 'female' then 'female' when lower(gender) = 'm' or lower(gender) = 'male' then 'male' end as cleanded_gender , count(*) as gender_countfrom ...where gender is not nullgroup by case when lower(gender) = 'f' or lower(gender) = 'female' then 'female' when lower(gender) = 'm' or lower(gender) = 'male' then 'male' end
when lower(gender) = 'f' or lower(gender) = 'female'
then 'female'
when lower(gender) = 'm' or lower(gender) = 'male'
then 'male'
end as cleanded_gender
, count(*) as gender_count
from
...
where
gender is not null
nuypyhwy3#
根据你的rdbm你可以采取性别的子串,只有第一个字符,它将分组在“f”,“m”,“u”。。。不太好,但会有用的
3条答案
按热度按时间li9yvcax1#
使用
case
表达式:请注意,您不需要
lower()
检查是否gender
是null
.某些数据库支持中的位置参数
group by
子句,所以您可以:其他数据库支持重新使用中定义的别名
select
条款:vh0rcniy2#
当然,你只需要列出这是怎么发生的。这可以使用函数或case语句来完成。
case语句是一次性查询的一个很好的解决方案,但是如果您要在多个查询中扩展它,我建议使用转换表或函数。
nuypyhwy3#
根据你的rdbm你可以采取性别的子串,只有第一个字符,它将分组在“f”,“m”,“u”。。。不太好,但会有用的