ฟังก์ชัน COUNT() คืออะไร?
ในบทที่แล้ว เราได้เรียนรู้การใช้ `BETWEEN` Clause เพื่อกรองข้อมูลในช่วงที่กำหนด ในบทนี้ เราจะมาเรียนรู้เกี่ยวกับฟังก์ชัน `COUNT()` ซึ่งเป็นฟังก์ชันที่สำคัญมากในการนับจำนวนแถวในตาราง ฟังก์ชันนี้ช่วยให้เราทราบจำนวนข้อมูลที่ตรงตามเงื่อนไขที่กำหนดได้อย่างรวดเร็วและง่ายดาย
ฟังก์ชัน `COUNT()` เป็น Aggregate function ใน SQL ซึ่งหมายความว่ามันจะทำการคำนวณจากหลายๆ แถวในตารางและคืนค่าออกมาเพียงค่าเดียว
รูปแบบการใช้งาน COUNT()
ฟังก์ชัน `COUNT()` มีรูปแบบการใช้งานหลักๆ อยู่ 2 แบบ คือ
COUNT(*): นับจำนวนแถวทั้งหมดในตาราง (รวมถึงแถวที่มีค่า NULL)COUNT(column_name): นับจำนวนแถวที่มีค่าในคอลัมน์ที่ระบุ (ไม่รวมแถวที่มีค่า NULL)
COUNT(*) - การนับจำนวนแถวทั้งหมด
การใช้ COUNT(*) เป็นวิธีที่ง่ายที่สุดในการนับจำนวนแถวทั้งหมดในตาราง ไม่ว่าคอลัมน์ใดๆ จะมีค่า NULL หรือไม่ก็ตาม
ตัวอย่าง: สมมติว่าเรามีตารางชื่อ `customers` ที่เก็บข้อมูลลูกค้า
CREATE TABLE customers (
customer_id INT PRIMARY KEY AUTO_INCREMENT,
first_name VARCHAR(50),
last_name VARCHAR(50),
email VARCHAR(100),
phone_number VARCHAR(20)
);
INSERT INTO customers (first_name, last_name, email, phone_number) VALUES
('John', 'Doe', 'john.doe@example.com', '123-456-7890'),
('Jane', 'Smith', 'jane.smith@example.com', '987-654-3210'),
('Peter', 'Jones', 'peter.jones@example.com', '555-123-4567'),
('Alice', 'Brown', NULL, '111-222-3333');
ถ้าเราต้องการทราบจำนวนลูกค้าทั้งหมดในตาราง เราสามารถใช้คำสั่ง SQL ดังนี้:
SELECT COUNT(*) AS total_customers
FROM customers;
ผลลัพธ์ที่ได้จะเป็น:
+-----------------+
| total_customers |
+-----------------+
| 4 |
+-----------------+
แสดงว่ามีลูกค้าทั้งหมด 4 คนในตาราง `customers`
COUNT(column_name) - การนับจำนวนแถวที่มีค่าในคอลัมน์
การใช้ COUNT(column_name) จะนับเฉพาะแถวที่มีค่าในคอลัมน์ที่ระบุเท่านั้น แถวที่มีค่า NULL ในคอลัมน์นั้นจะไม่ถูกนับ
ตัวอย่าง: จากตาราง `customers` เดิม ถ้าเราต้องการทราบจำนวนลูกค้าที่มีอีเมล เราสามารถใช้คำสั่ง SQL ดังนี้:
SELECT COUNT(email) AS customers_with_email
FROM customers;
ผลลัพธ์ที่ได้จะเป็น:
+-----------------------+
| customers_with_email |
+-----------------------+
| 3 |
+-----------------------+
แสดงว่ามีลูกค้า 3 คนที่มีข้อมูลอีเมลอยู่ในตาราง `customers` (Alice Brown ไม่มีอีเมล)
การใช้งาน COUNT() ร่วมกับ WHERE Clause
เราสามารถใช้ `COUNT()` ร่วมกับ `WHERE` Clause เพื่อนับจำนวนแถวที่ตรงตามเงื่อนไขที่กำหนด
ตัวอย่าง: ถ้าเราต้องการทราบจำนวนลูกค้าที่มีเบอร์โทรศัพท์ขึ้นต้นด้วย '1' เราสามารถใช้คำสั่ง SQL ดังนี้:
SELECT COUNT(*) AS customers_with_phone_prefix_1
FROM customers
WHERE phone_number LIKE '1%';
ผลลัพธ์ที่ได้จะเป็น:
+-----------------------------------+
| customers_with_phone_prefix_1 |
+-----------------------------------+
| 2 |
+-----------------------------------+
แสดงว่ามีลูกค้า 2 คนที่มีเบอร์โทรศัพท์ขึ้นต้นด้วย '1'
การใช้งาน COUNT() ร่วมกับ GROUP BY Clause
เราสามารถใช้ `COUNT()` ร่วมกับ `GROUP BY` Clause เพื่อนับจำนวนแถวในแต่ละกลุ่มที่กำหนด
ตัวอย่าง: สมมติว่าเรามีตารางชื่อ `orders` ที่เก็บข้อมูลการสั่งซื้อสินค้า
CREATE TABLE orders (
order_id INT PRIMARY KEY AUTO_INCREMENT,
customer_id INT,
order_date DATE,
total_amount DECIMAL(10, 2),
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);
INSERT INTO orders (customer_id, order_date, total_amount) VALUES
(1, '2023-01-15', 100.00),
(2, '2023-02-20', 250.50),
(1, '2023-03-10', 75.00),
(3, '2023-04-05', 120.75),
(2, '2023-05-12', 300.00);
ถ้าเราต้องการทราบจำนวนการสั่งซื้อของลูกค้าแต่ละคน เราสามารถใช้คำสั่ง SQL ดังนี้:
SELECT customer_id, COUNT(*) AS number_of_orders
FROM orders
GROUP BY customer_id;
ผลลัพธ์ที่ได้จะเป็น:
+-------------+------------------+
| customer_id | number_of_orders |
+-------------+------------------+
| 1 | 2 |
| 2 | 2 |
| 3 | 1 |
+-------------+------------------+
แสดงว่าลูกค้าที่มี ID 1 และ 2 มีการสั่งซื้อ 2 ครั้ง ส่วนลูกค้าที่มี ID 3 มีการสั่งซื้อ 1 ครั้ง
กรณีใช้งานจริง
ฟังก์ชัน `COUNT()` มีประโยชน์อย่างมากในการวิเคราะห์ข้อมูลและสร้างรายงาน ตัวอย่างเช่น:
- นับจำนวนผู้ใช้งานที่ลงทะเบียนในแต่ละช่วงเวลา
- นับจำนวนสินค้าที่ขายได้ในแต่ละหมวดหมู่
- นับจำนวนข้อผิดพลาดที่เกิดขึ้นในระบบ
- นับจำนวนลูกค้าที่ทำการสั่งซื้อซ้ำ
ข้อผิดพลาดที่พบบ่อย
- ลืมใส่ `AS` เพื่อตั้งชื่อให้กับคอลัมน์ผลลัพธ์: ทำให้ผลลัพธ์ที่ได้อ่านยากหรือไม่สามารถนำไปใช้งานต่อได้ ควรใช้ `AS` เพื่อตั้งชื่อที่สื่อความหมายให้กับคอลัมน์ที่ได้จาก `COUNT()`
- เข้าใจผิดว่า `COUNT(column_name)` จะนับค่าที่ไม่ซ้ำ: `COUNT(column_name)` จะนับจำนวนแถวที่มีค่าในคอลัมน์นั้นๆ ไม่ได้นับค่าที่ไม่ซ้ำ หากต้องการนับค่าที่ไม่ซ้ำ ต้องใช้ `COUNT(DISTINCT column_name)`
- ใช้ `COUNT(*)` ใน `WHERE` Clause: `COUNT(*)` เป็น Aggregate function ซึ่งไม่สามารถใช้ใน `WHERE` Clause ได้โดยตรง หากต้องการกรองข้อมูลก่อนนับ ต้องใช้ Subquery หรือ HAVING Clause
สรุป
ฟังก์ชัน `COUNT()` เป็นเครื่องมือที่สำคัญในการนับจำนวนแถวในตาราง MySQL ไม่ว่าจะเป็นการนับจำนวนแถวทั้งหมด การนับจำนวนแถวที่มีค่าในคอลัมน์ที่ระบุ หรือการนับจำนวนแถวในแต่ละกลุ่ม การเข้าใจและใช้งาน `COUNT()` อย่างถูกต้อง จะช่วยให้คุณสามารถวิเคราะห์ข้อมูลและสร้างรายงานได้อย่างมีประสิทธิภาพ
ในบทถัดไป เราจะมาเรียนรู้เกี่ยวกับฟังก์ชัน `SUM()` ซึ่งใช้ในการหาผลรวมของข้อมูลในคอลัมน์