ใช้ COUNT(*) ร่วมกับ GROUP BY เพื่อนับจำนวนครั้งของแต่ละค่าที่แตกต่างกัน
สร้างตารางตัวอย่าง
mysql> create table DemoTable (
Value int );
Query OK, 0 rows affected (0.57 sec)
เพิ่มข้อมูลตัวอย่าง
mysql> insert into DemoTable values(80); Query OK, 1 row affected (0.12 sec) mysql> insert into DemoTable values(90); Query OK, 1 row affected (0.12 sec) mysql> insert into DemoTable values(90); Query OK, 1 row affected (0.10 sec) mysql> insert into DemoTable values(80); Query OK, 1 row affected (0.10 sec) mysql> insert into DemoTable values(100); Query OK, 1 row affected (0.11 sec) mysql> insert into DemoTable values(90); Query OK, 1 row affected (0.12 sec)
แสดงข้อมูลทั้งหมด
mysql> select *from DemoTable;
+-------+ | Value | +-------+ | 80 | | 90 | | 90 | | 80 | | 100 | | 90 | +-------+ 6 rows in set (0.00 sec)
คิวรี่นับจำนวนแต่ละค่า
mysql> select Value,count(*) from DemoTable group by Value;
ผลลัพธ์:
+-------+----------+ | Value | count(*) | +-------+----------+ | 80 | 2 | | 90 | 3 | | 100 | 1 | +-------+----------+ 3 rows in set (0.00 sec)
การปรับแต่งเพิ่มเติม
- Alias:
SELECT Value, COUNT(*) AS frequency ... - เรียงลำดับ:
ORDER BY frequency DESC - นับค่าที่ไม่ซ้ำ (Distinct Count):
SELECT COUNT(DISTINCT Value) FROM DemoTable;→ ผลลัพธ์: 3 - กรองเฉพาะที่ซ้ำ:
HAVING COUNT(*) > 1
MySQL 8.0+: Window Function
SELECT DISTINCT Value, COUNT(*) OVER (PARTITION BY Value) as cnt FROM DemoTable;
ประสิทธิภาพ
- เพิ่ม Index:
CREATE INDEX idx_value ON DemoTable(Value); - Covering Index:
CREATE INDEX idx_value_cover ON DemoTable(Value) INCLUDE (other_cols);(MySQL 8.0.13+)
การประยุกต์: Histogram / Frequency Distribution
SELECT
Value,
COUNT(*) as frequency,
COUNT(*) * 100.0 / SUM(COUNT(*)) OVER () as percentage
FROM DemoTable
GROUP BY Value
ORDER BY Value;