gpt4 book ai didi

mysql - 同一基础表的两个 GROUP BY 子查询的列总和

转载 作者:行者123 更新时间:2023-11-29 16:42:48 26 4
gpt4 key购买 nike

更新我确定了一种更加简洁且计算上最优的方式来表达这一陈述。没有子查询没有多重连接。:

SELECT
month(hire_date) as month,
sum(case when gender ="m" then 1 end) as male,
sum(case when gender ="f" then 1 end) as female,
count(*) as total
FROM employees
GROUP BY MONTH(hire_date)
<小时/>

使用 MySQL Employees Sample Database ,我通过子查询查询同一个员工表两次,并交叉连接结果以获得下面的数据透视表。我希望创建最后一列,该列是 mcountfcount

的总和
Month,Gender,mcount,gender,fcount
'1','M','14310','F','9549'
'2','M','14659','F','9789'
'3','M','16200','F','10717'
'4','M','15363','F','10190'
'5','M','15545','F','10398'
'6','M','15000','F','10003'
'7','M','15260','F','10345'
'8','M','15250','F','10146'
'9','M','14632','F','9684'

我尝试再次使用子查询来创建此列,但很明显我的两个 GROUP BY 子查询是构建此数据透视表的错误方法。

SELECT mbm.month, mbm.gender, mbm.count as mcount, fbm.gender, fbm.count as fcount
FROM
(SELECT MONTH(hire_date) as Month, gender, COUNT(*) as count
FROM employees
WHERE gender = "M"
GROUP BY gender,MONTH(hire_date)
) as mbm

CROSS JOIN (SELECT MONTH(hire_date) as Month, gender, COUNT(*) as count
FROM employees
WHERE gender = "F"
GROUP BY gender,MONTH(hire_date)
) AS fbm on mbm.Month = fbm.Month

最佳答案

表达此语句的一种更加简洁且计算上最佳的方式。没有子查询,没有多重联接,并且易于阅读:

SELECT
month(hire_date) as month,
sum(case when gender ="m" then 1 end) as male,
sum(case when gender ="f" then 1 end) as female,
count(*) as total
FROM employees
GROUP BY MONTH(hire_date)

关于mysql - 同一基础表的两个 GROUP BY 子查询的列总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53256832/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com