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

หาจำนวนครั้งที่ค่าปรากฏในคอลัมน์ภายใน Query เดียวใน MySQL

ใช้ Subquery ใน SELECT เพื่อนับจำนวนครั้งของค่าในแต่ละแถว

ตัวอย่างการใช้งาน

1. สร้างตารางและข้อมูล

mysql> CREATE TABLE DemoTable (Value INT);
mysql> INSERT INTO DemoTable VALUES (20), (30), (20), (40), (30), (20);

2. Query นับ Occurrence ต่อแถว

mysql> SELECT tbl.Value, 
    -> (SELECT COUNT(*) FROM DemoTable WHERE Value = tbl.Value) AS Occurrence 
    -> FROM DemoTable tbl;

ผลลัพธ์

+-------+------------+
| Value | Occurrence |
+-------+------------+
| 20    | 3          |
| 30    | 2          |
| 20    | 3          |
| 40    | 1          |
| 30    | 2          |
| 20    | 3          |
+-------+------------+

วิธีที่มีประสิทธิภาพมากกว่า (JOIN / Window Function)

1. ใช้ JOIN กับ Subquery รวม

SELECT d.Value, c.cnt AS Occurrence
FROM DemoTable d
JOIN (SELECT Value, COUNT(*) AS cnt FROM DemoTable GROUP BY Value) c
  ON d.Value = c.Value;

2. MySQL 8.0+: Window Function

SELECT Value, COUNT(*) OVER (PARTITION BY Value) AS Occurrence
FROM DemoTable;

เปรียบเทียบประสิทธิภาพ

วิธีComplexityMySQL Versionหมายเหตุ
Correlated SubqueryO(n²)Allช้า ข้อมูลเยอะ
JOIN + GROUP BYO(n log n)Allแนะนำทั่วไป
Window FunctionO(n log n)8.0+สะดวก อ่านง่าย