在 MySQL SELECT 查詢中,為什麼我們不應將組函式與無組欄位一起使用,而不用 GROUP BY 子句呢?


這是因為如果沒有 GROUP BY 子句,MySQL 返回的輸出可能會產生誤導。針對下面給出的“學生”表提供以下示例來說明 −

mysql> Select * from Student;
+------+---------+---------+-----------+
| Id   | Name    | Address | Subject   |
+------+---------+---------+-----------+
| 1    | Gaurav  | Delhi   | Computers |
| 2    | Aarav   | Mumbai  | History   |
| 15   | Harshit | Delhi   | Commerce  |
| 20   | Gaurav  | Jaipur  | Computers |
+------+---------+---------+-----------+
4 rows in set (0.00 sec)

mysql> Select count(*), Name from Student;
+----------+--------+
| count(*) | name   |
+----------+--------+
| 4        | Gaurav |
+----------+--------+
1 row in set (0.00 sec)

正如從上面查詢結果中觀察到的那樣,它返回了表中總行數的組函式 COUNT(*) 的輸出,但欄位“名稱”中的值“Gaurav”具有誤導性,因為我們不知道它是基於什麼,要麼是列的第一個值,要麼是多次儲存在列中,MySQL 返回了該值。

如果使用 GROUP BY 子句編寫此查詢,則結果集如下 −

mysql> Select count(*), name from student GROUP BY id;
+----------+---------+
| count(*) | name    |
+----------+---------+
| 1        | Gaurav  |
| 1        | Aarav   |
| 1        | Harshit |
| 1        | Gaurav  |
+----------+---------+
4 rows in set (0.00 sec)

可以從上面的結果集中觀察到,藉助 GROUP BY 子句,我們得到了一個有意義的輸出。

更新於: 30 年 1 月 2020 日

186 次瀏覽

開啟您的 職業 生涯

透過完成這門課程來獲得認證

馬上開始
廣告