gpt4 book ai didi

SQL - HAVING 与 WHERE

转载 作者:行者123 更新时间:2023-11-29 17:20:19 26 4
gpt4 key购买 nike

我有以下两个表:

1. Lecturers (LectID, Fname, Lname, degree).
2. Lecturers_Specialization (LectID, Expertise).

我想找到最专业的讲师。当我尝试这个时,它不起作用:

SELECT
L.LectID,
Fname,
Lname
FROM Lecturers L,
Lecturers_Specialization S
WHERE L.LectID = S.LectID
AND COUNT(S.Expertise) >= ALL (SELECT
COUNT(Expertise)
FROM Lecturers_Specialization
GROUP BY LectID);

但是当我尝试这个时,它起作用了:

SELECT
L.LectID,
Fname,
Lname
FROM Lecturers L,
Lecturers_Specialization S
WHERE L.LectID = S.LectID
GROUP BY L.LectID,
Fname,
Lname
HAVING COUNT(S.Expertise) >= ALL (SELECT
COUNT(Expertise)
FROM Lecturers_Specialization
GROUP BY LectID);

原因是什么?谢谢。

最佳答案

WHERE 子句引入了各个行的条件; HAVING 子句引入了聚合的条件,即从生成单个结果(例如计数、平均值、最小值、最大值或总和)的选择结果>多行。您的查询需要第二种条件(即聚合条件),因此 HAVING 可以正常工作。

根据经验,请在 GROUP BY 之前使用 WHERE,在 GROUP BY 之后使用 HAVING。这是一个相当原始的规则,但在 90% 以上的情况下都是有用的。

当您执行此操作时,您可能希望使用 ANSI 版本的联接重新编写查询:

SELECT  L.LectID, Fname, Lname
FROM Lecturers L
JOIN Lecturers_Specialization S ON L.LectID=S.LectID
GROUP BY L.LectID, Fname, Lname
HAVING COUNT(S.Expertise)>=ALL
(SELECT COUNT(Expertise) FROM Lecturers_Specialization GROUP BY LectID)

这将消除用作 theta 连接条件WHERE

关于SQL - HAVING 与 WHERE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51294133/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com