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