sql中的合并行计数

8ljdwjyq  于 2021-08-01  发布在  Java
关注(0)|答案(3)|浏览(366)

目前我有sql中的数据,需要合并行中的计数。
我的代码是:

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

它摆出一张table,像:

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

有没有办法把雌性和f的计数结合起来,然后把雄性和m的计数结合起来?

li9yvcax

li9yvcax1#

使用 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() 检查是否 gendernull .
某些数据库支持中的位置参数 group by 子句,所以您可以:

group by 1

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

group by new_gender
vh0rcniy

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_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
nuypyhwy

nuypyhwy3#

根据你的rdbm你可以采取性别的子串,只有第一个字符,它将分组在“f”,“m”,“u”。。。不太好,但会有用的

相关问题