组合不同长度的SQL查询
我想知道你将如何结合这两个查询组合不同长度的SQL查询,sql,Sql,我想知道你将如何结合这两个查询 -- gets average sick leave for females for each job SELECT AVG(SickLeaveHours) AS FSickLeave FROM Employees WHERE Gender = 'female' GROUP BY Job ORDER BY FSickLeave DESC; -- gets average sick leave for males for each job SELECT AVG(S
-- gets average sick leave for females for each job
SELECT AVG(SickLeaveHours) AS FSickLeave
FROM Employees
WHERE Gender = 'female'
GROUP BY Job
ORDER BY FSickLeave DESC;
-- gets average sick leave for males for each job
SELECT AVG(SickLeaveHours) AS MSickLeave
FROM Employees
WHERE Gender = 'male'
GROUP BY Job
ORDER BY MSickLeave DESC;
我已经尝试过使用子查询和联合,但由于列长度不同,所以遇到了问题
感谢您的帮助。关键是将条件放在
大小写表达式中,如果条件不匹配,请将值设置为NULL
,以防止它成为AVG
'd集合的一部分:
SELECT
AVG(CASE WHEN Gender = 'female' THEN SickLeaveHours ELSE NULL END) AS FSickLeave,
AVG(CASE WHEN Gender = 'male' THEN SickLeaveHours ELSE NULL END) AS MSickLeave
FROM Employees
GROUP BY Job
ORDER BY FSickLeave DESC;
关键是将条件放在CASE
表达式中,如果条件不匹配,则将值设置为NULL
,以防止其成为AVG
'd集合的一部分:
SELECT
AVG(CASE WHEN Gender = 'female' THEN SickLeaveHours ELSE NULL END) AS FSickLeave,
AVG(CASE WHEN Gender = 'male' THEN SickLeaveHours ELSE NULL END) AS MSickLeave
FROM Employees
GROUP BY Job
ORDER BY FSickLeave DESC;
用户外部应用
SELECT AVG(SickLeaveHours) AS FSickLeave,MSickLeave
FROM Employees
OUTER APPLY(
SELECT AVG(SickLeaveHours) AS MSickLeave
FROM Employees
WHERE Gender = 'male'
GROUP BY Job
ORDER BY MSickLeave DESC
) M1
WHERE Gender = 'female'
GROUP BY Job
ORDER BY FSickLeave DESC;
用户外部应用
SELECT AVG(SickLeaveHours) AS FSickLeave,MSickLeave
FROM Employees
OUTER APPLY(
SELECT AVG(SickLeaveHours) AS MSickLeave
FROM Employees
WHERE Gender = 'male'
GROUP BY Job
ORDER BY MSickLeave DESC
) M1
WHERE Gender = 'female'
GROUP BY Job
ORDER BY FSickLeave DESC;
Case表达式,Case表达式。