按性别统计员工数SQL输出格式不符,请求技术帮助
问题分析与解决办法
嗨,我来帮你理清楚问题所在~
你现在得到的结果是把男女数量放在同一行的两个列里,这是因为你的SQL用了横向条件聚合的写法(把COUNT(CASE...)作为列),而你想要的是按性别分组的纵向输出(每行对应一个性别,带数量)。
正确的SQL写法
你需要用GROUP BY按性别分组,同时把原始的性别代码('M'/'F')转换成你想要的显示文本('Male'/'Female'),具体语句如下:
SELECT CASE SEX WHEN 'M' THEN 'Male' WHEN 'F' THEN 'Female' END AS SEX, COUNT(*) AS Number FROM EMPLOYEE GROUP BY SEX;
如果你的数据库支持IF函数(比如MySQL),也可以简化成:
SELECT IF(SEX = 'M', 'Male', 'Female') AS SEX, COUNT(*) AS Number FROM EMPLOYEE GROUP BY SEX;
为什么原来的SQL不对?
你之前的语句没有使用GROUP BY,所以整个查询只会返回一行结果,通过COUNT(CASE...)分别统计出男、女的数量,然后把这两个数值作为两个列展示——这其实是把数据“透视”成了列,和你想要的行式输出结构完全不同。
补充说明
如果你的表中可能存在除了'M'/'F'之外的性别值,还可以添加WHERE SEX IN ('M','F')来过滤无关数据,确保结果只包含你需要的两类性别。
内容的提问来源于stack exchange,提问作者user8056455
相关产品推荐
相关产品推荐

