sql中的合并行计数

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

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

  1. WHERE lower(GENDER) IS NOT NULL
  2. GROUP BY lower(GENDER)

它摆出一张table,像:

  1. Gender Count
  2. female 100
  3. f 101
  4. male 102
  5. m 103
  6. unknown 104

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

li9yvcax

li9yvcax1#

使用 case 表达式:

  1. select
  2. case lower(gender)
  3. when 'f' then 'female'
  4. when 'm' then 'male'
  5. else lower(gender)
  6. end new_gender,
  7. count(*) cnt
  8. from mytable
  9. where gender is not null
  10. group by case lower(gender)
  11. when 'f' then 'female'
  12. when 'm' then 'male'
  13. else lower(gender)
  14. end

请注意,您不需要 lower() 检查是否 gendernull .
某些数据库支持中的位置参数 group by 子句,所以您可以:

  1. group by 1

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

  1. group by new_gender
展开查看全部
vh0rcniy

vh0rcniy2#

当然,你只需要列出这是怎么发生的。这可以使用函数或case语句来完成。
case语句是一次性查询的一个很好的解决方案,但是如果您要在多个查询中扩展它,我建议使用转换表或函数。

  1. select
  2. case
  3. when lower(gender) = 'f' or lower(gender) = 'female'
  4. then 'female'
  5. when lower(gender) = 'm' or lower(gender) = 'male'
  6. then 'male'
  7. end as cleanded_gender
  8. , count(*) as gender_count
  9. from
  10. ...
  11. where
  12. gender is not null
  13. group by
  14. case
  15. when lower(gender) = 'f' or lower(gender) = 'female'
  16. then 'female'
  17. when lower(gender) = 'm' or lower(gender) = 'male'
  18. then 'male'
  19. end
展开查看全部
nuypyhwy

nuypyhwy3#

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

相关问题