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

นับจำนวนค่าซ้ำในคอลัมน์เดียวใน MySQL ด้วย GROUP BY

บทนำ

การนับความถี่ (Frequency) ของแต่ละค่าในคอลัมน์ ใช้ GROUP BY ร่วมกับ COUNT(*)

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

mysql> CREATE TABLE DemoTable (
    -> Number INT
    -> );
Query OK, 0 rows affected (0.83 sec)
mysql> INSERT INTO DemoTable VALUES(20);
mysql> INSERT INTO DemoTable VALUES(20);
mysql> INSERT INTO DemoTable VALUES(10);
mysql> INSERT INTO DemoTable VALUES(30);
mysql> INSERT INTO DemoTable VALUES(10);
mysql> INSERT INTO DemoTable VALUES(10);

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

mysql> SELECT * FROM DemoTable;

ผลลัพธ์

+--------+
| Number |
+--------+
| 20     |
| 20     |
| 10     |
| 30     |
| 10     |
| 10     |
+--------+
6 rows in set (0.00 sec)

คำสั่งนับจำนวนแต่ละค่า

mysql> SELECT Number, COUNT(*) FROM DemoTable GROUP BY Number;

ผลลัพธ์

+--------+----------+
| Number | COUNT(*) |
+--------+----------+
| 20     | 2        |
| 10     | 3        |
| 30     | 1        |
+--------+----------+
3 rows in set (0.00 sec)

คำอธิบาย

  • GROUP BY Number จัดกลุ่มแถวที่มี Number เหมือนกัน
  • COUNT(*) นับจำนวนแถวในแต่ละกลุ่ม
  • ค่า 10 ปรากฏ 3 ครั้ง, 20 ปรากฏ 2 ครั้ง, 30 ปรากฏ 1 ครั้ง

การประยุกต์: หาเฉพาะค่าที่ซ้ำ (Duplicate Values)

SELECT Number, COUNT(*) AS Count
FROM DemoTable
GROUP BY Number
HAVING COUNT(*) > 1;

ผลลัพธ์

+--------+-------+
| Number | Count |
+--------+-------+
| 20     | 2     |
| 10     | 3     |
+--------+-------+

การประยุกต์: หาค่าที่ไม่ซ้ำ (Unique Values)

SELECT Number, COUNT(*) AS Count
FROM DemoTable
GROUP BY Number
HAVING COUNT(*) = 1;

ผลลัพธ์

+--------+-------+
| Number | Count |
+--------+-------+
| 30     | 1     |
+--------+-------+

เพิ่มความชัดเจนด้วย Alias และ ORDER BY

SELECT Number, COUNT(*) AS Frequency
FROM DemoTable
GROUP BY Number
ORDER BY Frequency DESC, Number;