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

คิวรี่ MySQL แสดงเรคคอร์ดที่มีจำนวนมากที่สุดในกลุ่มพร้อมคอลัมน์อื่น


คำอธิบาย

บทความนี้สาธิตวิธีค้นหาค่าที่เกิดขึ้นบ่อยที่สุด (Mode) ในคอลัมน์ และแสดงจำนวนครั้งที่เกิดขึ้น โดยใช้ GROUP BY HAVING และ Subquery

ขั้นตอนการสร้างตารางและข้อมูลตัวอย่าง

mysql> create table DemoTable ( 
    Value int ); 
Query OK, 0 rows affected (0.54 sec)

การเพิ่มข้อมูล (มีค่าซ้ำหลายค่า)

mysql> insert into DemoTable values(88); 
Query OK, 1 row affected (0.22 sec)
mysql> insert into DemoTable values(88); 
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable values(88); 
Query OK, 1 row affected (0.09 sec)
mysql> insert into DemoTable values(99); 
Query OK, 1 row affected (0.09 sec)
mysql> insert into DemoTable values(99); 
Query OK, 1 row affected (0.09 sec)
mysql> insert into DemoTable values(99); 
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable values(99); 
Query OK, 1 row affected (0.07 sec)
mysql> insert into DemoTable values(100); 
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values(100); 
Query OK, 1 row affected (0.07 sec)
mysql> insert into DemoTable values(88); 
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable values(88); 
Query OK, 1 row affected (0.11 sec)

แสดงข้อมูลทั้งหมด

mysql> select * from DemoTable;

ผลลัพธ์:

+-------+
| Value |
+-------+
| 88    |
| 88    |
| 88    |
| 99    |
| 99    |
| 99    |
| 99    |
| 100   |
| 100   |
| 88    |
| 88    |
+-------+
11 rows in set (0.00 sec)

คิวรี่หาค่าที่มีจำนวนมากที่สุด

ใช้ GROUP BY HAVING ร่วมกับ Subquery ที่เรียงลำดับตามจำนวนนับ (COUNT) แบบ DESC และ LIMIT 1:

mysql> select Value, count(*) as NumberOfCount 
from DemoTable 
group by Value 
having count(*) = (
    select count(*) as NumberOfCount 
    from DemoTable 
    group by Value 
    order by NumberOfCount desc 
    limit 1
);

ผลลัพธ์

+-------+---------------+
| Value | NumberOfCount |
+-------+---------------+
| 88    | 5             |
+-------+---------------+
1 row in set (0.00 sec)

คำอธิบายเพิ่มเติม

  • Subquery ภายใน HAVING จะหาจำนวนสูงสุดของกลุ่มใดกลุ่มหนึ่ง
  • ค่า 88 ปรากฏ 5 ครั้ง (มากกว่า 99 ที่ 4 ครั้ง และ 100 ที่ 2 ครั้ง)
  • เทคนิคนี้ใช้ได้กับการหา Mode หรือค่าที่พบบ่อยที่สุดในสถิติ