我完全混淆了为什么这段代码不是GROUP BY表达式:
SELECT Section_ID, COUNT(Student_ID)
FROM Enrollment
WHERE Enroll_Date = TO_DATE('22-FEB-2007', 'DD-MON-YYYY')
GROUP BY Section_ID
ORDER BY Section_ID DESC, Student_ID;
我知道这与COUNT功能有关,但我无法弄清楚原因。即使我将COUNT(Student_ID)添加到GROUP BY,我也会得到一个不同的错误,即此处不允许使用组功能。我做错了什么?
答案 0 :(得分:5)
学生现在不是结果的一部分,所以你不能按顺序排序。您可以按计数值排序。
另请注意。通过对section_id进行分组,每个行只有一个唯一的行,因此不需要按第二列排序。
答案 1 :(得分:0)
这里group by()子句依赖于select语句中的列,而order by()子句依赖于分组列,因此我们无法对未分组的列进行排序。但是在正常的select语句中,即使列未在select语句中列出,我们也可以使用该列。 Student_id未分组,因此会出现此错误。
所以我们可以使用
SELECT Section_ID, COUNT(Student_ID)
FROM Enrollment
WHERE Enroll_Date = TO_DATE('22-FEB-2007', 'DD-MON-YYYY')
GROUP BY Section_ID
ORDER BY Section_ID DESC;
或者我们可以使用
SELECT Section_ID, COUNT(Student_ID)
FROM Enrollment
WHERE Enroll_Date = TO_DATE('22-FEB-2007', 'DD-MON-YYYY')
GROUP BY Section_ID,Student_ID
ORDER BY Section_ID DESC, Student_ID;
但我们没有使用第二个。