在 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 子句,我們得到了一個有意義的輸出。
廣告