不是GROUP BY Expression,而是为什么?

时间:2017-10-05 03:10:03

标签: sql oracle

我完全混淆了为什么这段代码不是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,我也会得到一个不同的错误,即此处不允许使用组功能。我做错了什么?

2 个答案:

答案 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;

但我们没有使用第二个。