组合不同长度的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表达式。