我之前发现了类似的问题类型。但那些并不完美,我想要的。所以,我在这里问过。
我有五张桌子如下......
department(dept_name,building,budget);
primary key (dept_name)
course(course_id,title,dept_name,credits);
primary key (course_id),
foreign key (dept_name) references department
instructor(id,name,dept_name,salary);
primary key (ID),
foreign key (dept_name) references department
section(course_id,sec_id,semester,year,building,room_number,time_slot_id);
primary key (course_id, sec_id, semester, year),
foreign key (course_id) references course
teaches(id,course_id,sec_id,semester,year);
primary key (ID, course_id, sec_id, semester, year),
foreign key (course_id, sec_id, semester, year) references section,
foreign key (ID) references instructor
现在我发现所有部门的总薪水都高于总薪水的平均值 在使用此查询的所有部门。
with dept_total (dept_name, value) as
(select dept_name, sum(salary)
from instructor
group by dept_name),
dept_total_avg(value) as
(select avg(value)
from dept_total)
select dept_name
from dept_total, dept_total_avg
where dept_total.value >= dept_total_avg.value;
如果不使用提供相同结果的with子句,那么等效查询是什么?
答案 0 :(得分:0)
使用HAVING子句将允许此操作,以下SQL未经测试但应该有效...
SELECT d.dept_name,
SUM(salary) AS DeptTotalSalary,
SUM(salary) / COUNT(*) AS DeptAverageSalary
FROM department d
JOIN instructor i ON i.dept_name d.dept_name
GROUP BY d.dept_name
HAVING DeptAverageSalary > DeptTotalSalary
答案 1 :(得分:0)
我没有改变测试,但这样的事情应该有效。
SELECT dept_name FROM instructor
GROUP BY dept_name
HAVING SUM(salary)>=
(SELECT AVG(dept_sum.SumSalary) AS AvgSalary FROM
(
SELECT dept_name, sum(salary) as SumSalary FROM instructor
GROUP BY dept_name
) as dept_sum
)
答案 2 :(得分:0)
最后,我得到了正确的查询。因此,不使用with子句的等效查询就是这个。
select dept_name
from (
select dept_name, sum(salary) dept_total
from instructor
group by dept_name
), (
select avg(dept_total) dept_total_avg
from (
select dept_name, sum(salary) dept_total
from instructor
group by dept_name
)
) where dept_total >= dept_total_avg;