在 MySQL SELECT 查詢中,我們為什麼不應在沒有 GROUP BY 子句的情況下將組函式與非組欄位一起使用?


這是因為如果沒有 GROUP BY 子句,MySQL 返回的輸出可能會產生誤導。我們提供以下示例,對下面給出的“Student”表進行了演示:−

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(*) 的輸出,即表中的總行數,但“Name”欄位中的值“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-01-2020

186 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始
廣告