การนับค่าที่ไม่ซ้ำกัน (Unique) ต่อกลุ่มด้วย COUNT(DISTINCT) และ GROUP BY
เมื่อต้องการนับจำนวนค่าที่ไม่ซ้ำกันในคอลัมน์หนึ่ง จัดกลุ่มตามคอลัมน์อีกคอลัมน์ เราใช้ COUNT(DISTINCT column) ร่วมกับ GROUP BY
สร้างตารางและเพิ่มข้อมูล
mysql> CREATE TABLE DemoTable (
UserName VARCHAR(100),
UserPostMessage TEXT
);
Query OK, 0 rows affected (0.54 sec)
mysql> INSERT INTO DemoTable VALUES('Chris','Hi');
mysql> INSERT INTO DemoTable VALUES('David','Hello');
mysql> INSERT INTO DemoTable VALUES('Chris','Awesome');
mysql> INSERT INTO DemoTable VALUES('Chris','Amazing');
mysql> INSERT INTO DemoTable VALUES('David','Nice Place');
mysql> INSERT INTO DemoTable VALUES('Chris','Amazing');
แสดงข้อมูลทั้งหมด
mysql> SELECT * FROM DemoTable;
ผลลัพธ์:
+----------+-----------------+
| UserName | UserPostMessage |
+----------+-----------------+
| Chris | Hi |
| David | Hello |
| Chris | Awesome |
| Chris | Amazing |
| David | Nice Place |
| Chris | Amazing |
+----------+-----------------+
6 rows in set (0.00 sec)
คำสั่งนับข้อความที่ไม่ซ้ำกันต่อผู้ใช้
mysql> SELECT UserName, COUNT(DISTINCT UserPostMessage) AS NumberOfMessagesPostByUser
FROM DemoTable GROUP BY UserName;
ผลลัพธ์:
+----------+----------------------------+
| UserName | NumberOfMessagesPostByUser |
+----------+----------------------------+
| Chris | 3 |
| David | 2 |
+----------+----------------------------+
2 rows in set (0.00 sec)
คำอธิบาย
GROUP BY UserName: จัดกลุ่มแถวตามชื่อผู้ใช้COUNT(DISTINCT UserPostMessage): นับเฉพาะข้อความที่ไม่ซ้ำกันในแต่ละกลุ่ม- Chris มีข้อความไม่ซ้ำ 3 ข้อความ (Hi, Awesome, Amazing) แม้ Amazing จะซ้ำ 2 ครั้ง
- David มีข้อความไม่ซ้ำ 2 ข้อความ (Hello, Nice Place)