我創建了一個名爲HOSTEL(hostel_num NUMBER, num_of_stud NUMBER)
表和我插入的值爲:當我施加GROUP BY
命令作爲GROUP BY在SQL代碼子句
--------------------------
hostel_num | num_of_stud |
--------------------------
1001 | 124 |
1001 | 234 |
1002 | 97 |
1002 | 134 |
1003 | 234 |
1004 | 123 |
1004 | 89 |
1001 | 67 |
--------------------------
:
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 |
-----------------------------
如果你試圖說它隨機挑選的命令,那麼我會說,我執行命令3-4次,每次它顯示相同的順序。如果它隨機選擇訂單,那麼下一次的輸出必定會有所不同。但是輸出沒有改變。 –
正如我喜歡說的,訂購是一種沒有ORDER BY的錯覺。通常您會看到由主鍵排序的行(因爲它是一個集羣索引),但有時您不會:-)如果您在集羣中有多個服務器並且在它們之間細分查詢,則會經常發生這種情況。 – xanatos
@Rubbal Bhusri:那不是我說的。如果顯式的ORDER BY不存在,查詢執行器可以按任意順序返回結果。期。他們以特定順序出來的事實取決於如何確定查詢執行計劃。 –