我正在研究SQL查询。
我在TutorialsPoint上遇到了以下内容,我很困惑为什么答案是B而不是C.
我一直被告知GROUP BY Clause在HAVING之前出现并且HAVING总是在最后。网上还有很多文档可以支持我的解决方案,例如:http://www.dba-oracle.com/t_oracle_group_by_having.htm和SQL query, sequence of execution
任何人都可以告诉我为什么B在以下示例中是正确的而不是C.本教程给出了正确的B。
考虑以下架构 -
STUDENTS(
student_code, first_name, last_name,
email, phone_no, date_of_birth,
honours_subject, percentage_of_marks
);
当平均值超过50%时,以下哪个查询会正确列出每个荣誉科目的平均分数百分比?
乙
select honours_subject,
avg(percentage_of_marks)
from students
having avg(percentage_of_marks) > 50.0
group by honours_subject;
下进行。
select honours_subject,
avg(percentage_of_marks)
from students
group by honours_subject
having avg(percentage_of_marks) > 50.0;
答案 0 :(得分:3)
尽管Oracle确实允许 B 工作,但它却错误地了解了实际发生的情况。此外,正如@a_horse_with_no_name所指出的那样,它根据 SQL标准无效,并且可能无法在其他数据库上运行。
我认为 C 在发生的事情方面更清楚,即在having
之后评估group by
子句。
对于那些认为 B 不在Oracle上工作的人,这是一个演示:
答案 1 :(得分:1)
您的教程已关闭。
HAVING
符合GROUP BY
条件。我想有可能有一些非标准的SQL解析器允许这种语法,但我真的不明白为什么;我相当肯定甲骨文不支持它(编辑:显然它确实 - 很奇怪)。这就像允许某人在WHERE
SELECT
条款一样
答案 2 :(得分:1)
B查询错误。
查询语法始终需要遵循 WGHO
W- where子句
G-组由
H-有
O-订单由
Where和Order by是可选的,只有使用group by语句
才能使用