有SALARY表和COMPANY表。
我需要输出AVG薪水高于14000的公司名称列表
Baker Hughes Incorporated
...
这是我当前的查询。我想知道是否有更有效的查询方法?
SELECT NAME FROM COMPANY WHERE ID in (
SELECT COMPANY_ID
FROM Salary S
GROUP BY COMPANY_ID Having AVG(Salary) >= 140000
)
答案 0 :(得分:0)
您可以尝试使用相关子查询并在ID
和COMPANY_ID
上做索引
SELECT NAME FROM COMPANY c WHERE exists (
SELECT 1 COMPANY_ID
FROM Salary s where s.COMPANY_ID=c.ID
Having AVG(Salary) >= 140000
)
答案 1 :(得分:0)
我认为查询的最简单形式是:
SELECT c.Name
FROM Company c JOIN
Salary s
ON s.COMPANY_ID = c.ID
GROUP BY c.Name, c.COMPANY_ID
HAVING AVG(s.Salary) >= 14000;
在尝试其他形式之前,我会先尝试一下。我希望Zaynul的答案(使用EXISTS
)使用正确的索引会稍快一些,但有时MySQL会让我感到惊讶。