Sql 2012简化查询联盟
Sql 2012 Simplify Query Union
我最近找到了一份新工作,我正在尝试简化一些遗留的旧查询,但我终究无法弄清楚如何使用 union 将其分解为两个查询。一定有办法,但我无法简化比我拥有的更多。
select (
select avg (Employee.salary)
from Employee left join Job_title
on Employee.job_title = Job_title.Job_title
where Employee.Exempt_Non_Exempt_Status='0'
group by Employee.Exempt_Non_Exempt_Status
) as AverageSalary, 'Non-Exempt' as Status
, (
select MIN (Employee.salary)
from Employee left join Job_title
on Employee.job_title = Job_title.Job_title
where Employee.Exempt_Non_Exempt_Status='0'
group by Employee.Exempt_Non_Exempt_Status
) as MinimumSalary, 'Non-Exempt' as Status
, (
select MAX (Employee.salary)
from Employee left join Job_title
on Employee.job_title = Job_title.Job_title
where Employee.Exempt_Non_Exempt_Status='0'
group by Employee.Exempt_Non_Exempt_Status
) as MaximumSalary, 'Non_Exempt' as Status
UNION
select (
select avg (Employee.salary)
from Employee left join Job_title
on Employee.job_title = Job_title.Job_title
where Employee.Exempt_Non_Exempt_Status='1'
group by Employee.Exempt_Non_Exempt_Status
) as AverageSalary, 'Exempt' as Status
, (
select MIN (Employee.salary)
from Employee left join Job_title
on Employee.job_title = Job_title.Job_title
where Employee.Exempt_Non_Exempt_Status='1'
group by Employee.Exempt_Non_Exempt_Status
) as MinimumSalary, 'Exempt' as Status
, (
select MAX (Employee.salary)
from Employee left join Job_title
on Employee.job_title = Job_title.Job_title
where Employee.Exempt_Non_Exempt_Status='1'
group by Employee.Exempt_Non_Exempt_Status
)as MaximumSalary, 'Exempt' as Status
您应该可以这样做:
select min(salary), max(salary), avg(salary), 'Non-Exempt' as otherThingy
from (
select Employee.salary
from Employee left join Job_title
on Employee.job_title = Job_title.Job_title
where Employee.Exempt_Non_Exempt_Status='0'
) thingy
UNION
select min(salary), max(salary), avg(salary), 'Exempt' as otherThingy
from (
select Employee.salary
from Employee left join Job_title
on Employee.job_title = Job_title.Job_title
where Employee.Exempt_Non_Exempt_Status='1'
) thingy
或者如果你真的很喜欢,你最有可能一次完成所有的事情:
http://sqlfiddle.com/#!6/8b437/1
select
min(salary),
max(salary),
avg(salary),
case when Exempt_Non_Exempt_Status = 0
then 'Non-Exempt'
else 'Exempt'
end as exemptStatus
from (
select Employee.salary, Exempt_Non_Exempt_Status
from Employee
) thingy
group by Exempt_Non_Exempt_Status
由于您只在每个子查询中选择 1 个字段,因此不需要 "Group By"。此外,根据数据,您可能不需要 link 在 Job_title Table.
如果您需要 Job_title table 那么...
SELECT Min(salary), Max(salary), Avg(salary), 'Non-Exempt' AS Status
FROM (SELECT employee.salary
FROM employee
LEFT JOIN job_title ON employee.job_title = job_title.job_title
WHERE employee.exempt_non_exempt_status = '0')
UNION
SELECT Min(salary), Max(salary), Avg(salary), 'Exempt' AS Status
FROM (SELECT employee.salary
FROM employee
LEFT JOIN job_title
ON employee.job_title = job_title.job_title
WHERE employee.exempt_non_exempt_status = '1')
如果您不需要 Job_title 中的 link(因为您没有在任何地方使用它)那么...
SELECT Min(salary), Max(salary), Avg(salary), 'Non-Exempt' AS Status
FROM (SELECT employee.salary
FROM employee
WHERE employee.exempt_non_exempt_status = '0')
UNION
SELECT Min(salary), Max(salary), Avg(salary), 'Exempt' AS Status
FROM (SELECT employee.salary
FROM employee
WHERE employee.exempt_non_exempt_status = '1')
感谢大家的快速响应。这是我使用的代码。我能够使用提供的所有代码获得相同的结果,并感谢大家。
SELECT Min(salary) as 'Minimum Salary', Max(salary) as 'Maximum Salary',Avg(salary) as 'Average Salary', 'Non-Exempt' AS Status
FROM (SELECT employee.salary
FROM employee
WHERE employee.exempt_non_exempt_status = '0') thingy1
UNION
SELECT Min(salary) as 'Minimum Salary', Max(salary) as 'Maximum Salary', Avg(salary) as 'Average Salary', 'Exempt' AS Status
FROM (SELECT employee.salary
FROM employee
WHERE employee.exempt_non_exempt_status = '1') thingy2
我最近找到了一份新工作,我正在尝试简化一些遗留的旧查询,但我终究无法弄清楚如何使用 union 将其分解为两个查询。一定有办法,但我无法简化比我拥有的更多。
select (
select avg (Employee.salary)
from Employee left join Job_title
on Employee.job_title = Job_title.Job_title
where Employee.Exempt_Non_Exempt_Status='0'
group by Employee.Exempt_Non_Exempt_Status
) as AverageSalary, 'Non-Exempt' as Status
, (
select MIN (Employee.salary)
from Employee left join Job_title
on Employee.job_title = Job_title.Job_title
where Employee.Exempt_Non_Exempt_Status='0'
group by Employee.Exempt_Non_Exempt_Status
) as MinimumSalary, 'Non-Exempt' as Status
, (
select MAX (Employee.salary)
from Employee left join Job_title
on Employee.job_title = Job_title.Job_title
where Employee.Exempt_Non_Exempt_Status='0'
group by Employee.Exempt_Non_Exempt_Status
) as MaximumSalary, 'Non_Exempt' as Status
UNION
select (
select avg (Employee.salary)
from Employee left join Job_title
on Employee.job_title = Job_title.Job_title
where Employee.Exempt_Non_Exempt_Status='1'
group by Employee.Exempt_Non_Exempt_Status
) as AverageSalary, 'Exempt' as Status
, (
select MIN (Employee.salary)
from Employee left join Job_title
on Employee.job_title = Job_title.Job_title
where Employee.Exempt_Non_Exempt_Status='1'
group by Employee.Exempt_Non_Exempt_Status
) as MinimumSalary, 'Exempt' as Status
, (
select MAX (Employee.salary)
from Employee left join Job_title
on Employee.job_title = Job_title.Job_title
where Employee.Exempt_Non_Exempt_Status='1'
group by Employee.Exempt_Non_Exempt_Status
)as MaximumSalary, 'Exempt' as Status
您应该可以这样做:
select min(salary), max(salary), avg(salary), 'Non-Exempt' as otherThingy
from (
select Employee.salary
from Employee left join Job_title
on Employee.job_title = Job_title.Job_title
where Employee.Exempt_Non_Exempt_Status='0'
) thingy
UNION
select min(salary), max(salary), avg(salary), 'Exempt' as otherThingy
from (
select Employee.salary
from Employee left join Job_title
on Employee.job_title = Job_title.Job_title
where Employee.Exempt_Non_Exempt_Status='1'
) thingy
或者如果你真的很喜欢,你最有可能一次完成所有的事情:
http://sqlfiddle.com/#!6/8b437/1
select
min(salary),
max(salary),
avg(salary),
case when Exempt_Non_Exempt_Status = 0
then 'Non-Exempt'
else 'Exempt'
end as exemptStatus
from (
select Employee.salary, Exempt_Non_Exempt_Status
from Employee
) thingy
group by Exempt_Non_Exempt_Status
由于您只在每个子查询中选择 1 个字段,因此不需要 "Group By"。此外,根据数据,您可能不需要 link 在 Job_title Table.
如果您需要 Job_title table 那么...
SELECT Min(salary), Max(salary), Avg(salary), 'Non-Exempt' AS Status
FROM (SELECT employee.salary
FROM employee
LEFT JOIN job_title ON employee.job_title = job_title.job_title
WHERE employee.exempt_non_exempt_status = '0')
UNION
SELECT Min(salary), Max(salary), Avg(salary), 'Exempt' AS Status
FROM (SELECT employee.salary
FROM employee
LEFT JOIN job_title
ON employee.job_title = job_title.job_title
WHERE employee.exempt_non_exempt_status = '1')
如果您不需要 Job_title 中的 link(因为您没有在任何地方使用它)那么...
SELECT Min(salary), Max(salary), Avg(salary), 'Non-Exempt' AS Status
FROM (SELECT employee.salary
FROM employee
WHERE employee.exempt_non_exempt_status = '0')
UNION
SELECT Min(salary), Max(salary), Avg(salary), 'Exempt' AS Status
FROM (SELECT employee.salary
FROM employee
WHERE employee.exempt_non_exempt_status = '1')
感谢大家的快速响应。这是我使用的代码。我能够使用提供的所有代码获得相同的结果,并感谢大家。
SELECT Min(salary) as 'Minimum Salary', Max(salary) as 'Maximum Salary',Avg(salary) as 'Average Salary', 'Non-Exempt' AS Status
FROM (SELECT employee.salary
FROM employee
WHERE employee.exempt_non_exempt_status = '0') thingy1
UNION
SELECT Min(salary) as 'Minimum Salary', Max(salary) as 'Maximum Salary', Avg(salary) as 'Average Salary', 'Exempt' AS Status
FROM (SELECT employee.salary
FROM employee
WHERE employee.exempt_non_exempt_status = '1') thingy2