是否可以使用GROUP BY合并两条统计各客户类型男女数量的SQL语句?
可以实现,用条件聚合的写法就能单条SQL拿到你要的结果,无需拆分两次查询再做关联,执行效率也更高。
实现语句
SELECT client_type, COUNT(CASE WHEN gender = 'Male' THEN 1 END) AS num_males, COUNT(CASE WHEN gender = 'Female' THEN 1 END) AS num_females FROM clients GROUP BY client_type;
原理解释
COUNT函数仅统计非空值,当行数据的gender不符合对应条件时,CASE WHEN会返回NULL,不会被计入统计结果,刚好实现分性别计数的需求。- 如果你使用的是支持
IF函数的数据库(比如MySQL),也可以用更简化的写法:
SELECT client_type, COUNT(IF(gender = 'Male', 1, NULL)) AS num_males, COUNT(IF(gender = 'Female', 1, NULL)) AS num_females FROM clients GROUP BY client_type;
- 如果需要将无对应性别客户的统计值显示为
0而非NULL,可以搭配COALESCE函数处理:COALESCE(COUNT(CASE WHEN gender = 'Male' THEN 1 END), 0) AS num_males
内容的提问来源于stack exchange,提问作者C-W-M-Oliver8012
相关产品推荐
相关产品推荐

