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 子句,所以您可以:
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_count
from
...
where
gender is not null
group by
case
when lower(gender) = 'f' or lower(gender) = 'female'
then 'female'
when lower(gender) = 'm' or lower(gender) = 'male'
then 'male'
end
3条答案
按热度按时间li9yvcax1#
使用
case
表达式:请注意,您不需要
lower()
检查是否gender
是null
.某些数据库支持中的位置参数
group by
子句,所以您可以:其他数据库支持重新使用中定义的别名
select
条款:vh0rcniy2#
当然,你只需要列出这是怎么发生的。这可以使用函数或case语句来完成。
case语句是一次性查询的一个很好的解决方案,但是如果您要在多个查询中扩展它,我建议使用转换表或函数。
nuypyhwy3#
根据你的rdbm你可以采取性别的子串,只有第一个字符,它将分组在“f”,“m”,“u”。。。不太好,但会有用的