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

วิธีนับเบอร์โทรศัพท์ที่ไม่ซ้ำกันจากคอลัมน์ BIGINT ใน MySQL

การนับค่า Unique ในคอลัมน์ BIGINT ด้วย COUNT(DISTINCT)

ใช้ COUNT(DISTINCT column_name) เพื่อนับจำนวนค่าที่ไม่ซ้ำกัน (Unique) ในคอลัมน์ที่เป็น BIGINT (หมายเลขโทรศัพท์)

รูปแบบคำสั่ง

SELECT COUNT(DISTINCT phone_column) AS unique_count FROM table_name;

ตัวอย่าง: นับเบอร์โทรศัพท์ที่ไม่ซ้ำ

1. สร้างตาราง (BIGINT สำหรับเบอร์โทร)

CREATE TABLE DemoTable (PhoneNumber BIGINT);

2. เพิ่มข้อมูล (มีซ้ำ)

INSERT INTO DemoTable VALUES 
(8567789898), (8567789898), (9876564534), (9087896545), 
(7656456589), (9876564534), (9087896545);

3. ดูข้อมูลทั้งหมด (7 แถว)

SELECT * FROM DemoTable;

4. นับเบอร์ที่ไม่ซ้ำ

SELECT COUNT(DISTINCT PhoneNumber) AS UniquePhoneNumber FROM DemoTable;

ผลลัพธ์:

+-------------------+
| UniquePhoneNumber |
+-------------------+
| 4                 |
+-------------------+

เบอร์ที่ไม่ซ้ำ: 8567789898, 9876564534, 9087896545, 7656456589 (4 เบอร์)

การทำงานของ COUNT(DISTINCT)

  • สร้าง Hash Set หรือ Sort แล้วนับค่าที่ไม่ซ้ำ
  • ไม่นับค่า NULL
  • ใช้ Memory สำหรับการจัดเก็บค่า Unique (อาจช้า/หน่วยความจำมาก หากค่ามากมาย)

ประสิทธิภาพกับ BIGINT

  • BIGINT ใช้ 8 ไบต์ เหมาะสำหรับหมายเลขโทรศัพท์ (สูงสุด 19-20 หลัก)
  • Index บน BIGINT ทำงานได้ดี: CREATE INDEX idx_phone ON DemoTable(PhoneNumber)
  • Index ช่วย COUNT(DISTINCT) ได้ในบางกรณี (Loose Index Scan)

การขยาย: แสดงเบอร์ที่ซ้ำพร้อมจำนวน

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

การขยาย: หาเบอร์ที่ซ้ำมากที่สุด (Top Duplicate)

SELECT PhoneNumber, COUNT(*) AS Count 
FROM DemoTable 
GROUP BY PhoneNumber 
ORDER BY Count DESC 
LIMIT 1;

ข้อควรระวัง: 儲存หมายเลขโทรศัพท์

  • BIGINT: เหมาะสำหรับตัวเลขอย่างเดียว (ไม่มี +, -, space, 括弧)
  • VARCHAR: ยืดหยุ่นกว่า รองรับรูปแบบต่างๆ (+66, 08x, 括弧, space)
  • แนะนำ: เก็บเป็น VARCHAR(20) + Normalize (เก็บเฉพาะตัวเลข) ใน Application Layer