2

我创建了一个名为的表HOSTEL(hostel_num NUMBER, num_of_stud NUMBER),并将值插入为:

-------------------------- 
hostel_num | num_of_stud  |
--------------------------
1001       |    124       |
1001       |    234       |
1002       |     97       |
1002       |    134       |
1003       |    234       |
1004       |    123       |
1004       |     89       |
1001       |     67       |
--------------------------

当我将GROUP BY命令应用为:

SELECT hostel_num, sum(num_of_stud) as total_students 
FROM HOSTELS 
GROUP BY hostel_num;

,我得到的结果是:

-----------------------------
hotel_num   | total_students |
-----------------------------
1003        |      234       |
1001        |      425       |
1002        |      231       |
1004        |      212       |
-----------------------------

现在,我的问题是:为什么hostel_num 1003排在首位?它不应该出现在第 3 行吗?这种命令背后的逻辑是什么?

我知道,该GROUP BY子句合并了重复的列值并将它们组合在一起。

我的疑问是:它如何决定显示这些值的顺序,就像这里一样,我期待这样的输出:

-----------------------------
hotel_num   | total_students |
-----------------------------
1001        |      425       |
1002        |      231       |
1003        |      234       |
1004        |      212       |
-----------------------------
4

4 回答 4

3

如果没有ORDER BY,则无法保证顺序:

SELECT hostel_num, sum(num_of_stud) as total_students 
FROM HOSTELS 
GROUP BY hostel_num
ORDER BY hostel_num;
于 2013-08-04T08:54:48.627 回答
0

你想用Order By

SELECT  hostel_num ,
        SUM(num_of_stud) AS total_students
FROM    HOSTELS
GROUP BY hostel_num
ORDER BY hostel_num

请参阅说明排序。

编辑:对于您所看到的内容,这里有一个很好的答案,也请看一下。

于 2013-08-04T08:55:25.797 回答
0

请指定您想要的顺序,因为我认为如果您不指定任何 order by 子句,它会自行决定。

SELECT  hostel_num ,
    SUM(num_of_stud) AS total_students
 FROM    HOSTELS
GROUP BY hostel_num
ORDER BY hostel_num
于 2013-08-04T08:57:14.280 回答
0

Ben Forta显着地陈述了以下说法。

通常,您会发现使用 GROUP BY 分组的数据确实会按组顺序输出。但情况并非总是如此,而且 SQL 规范实际上并不要求这样做。此外,即使您的特定 DBMS 实际上总是按指定的GROUP BY子句对数据进行排序,您实际上可能希望它以不同的方式排序。仅仅因为您以一种方式对数据进行分组(以获得特定于组的聚合值)并不意味着您希望以相同的方式对输出进行排序。您也应该始终提供一个显式 ORDER BY子句,即使它与该GROUP BY 子句相同。

小费:

不要忘记订购方式

通常,只要您使用GROUP BY子句,您还应该指定一个ORDER BY子句。这是确保数据正确排序的唯一方法。永远不要依赖对GROUP BY数据进行排序。

于 2019-12-04T12:52:13.340 回答