Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

ทำไมไม่ควรใช้ฟังก์ชันกลุ่มกับฟิลด์ที่ไม่ได้จัดกลุ่มโดยไม่มี GROUP BY ใน MySQL

เพราะหากไม่มี 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(*) คืนจำนวนแถวทั้งหมด (4) แต่ค่า Gaurav ในฟิลด์ Name นั้นทำให้เข้าใจผิด เพราะไม่ทราบว่า 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 เราได้ผลลัพธ์ที่มีความหมายและถูกต้อง