คำอธิบาย
บทความนี้สาธิตวิธีค้นหาค่าที่เกิดขึ้นบ่อยที่สุด (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 หรือค่าที่พบบ่อยที่สุดในสถิติ