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

นับจำนวนข้อความที่ไม่ซ้ำกันต่อผู้ใช้ใน MySQL ด้วย GROUP BY

การนับค่าที่ไม่ซ้ำกัน (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)