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

ตัวอย่าง SQL Query: COUNT() และ GROUP BY ใน DB2

โจทย์

Query ตาราง TRANSACTIONS: นับจำนวน ORDER_ID ต่อ TRANSACTION_ID

คำตอบ

SELECT TRANSACTION_ID, COUNT(ORDER_ID)
FROM TRANSACTIONS
GROUP BY TRANSACTION_ID;

ข้อมูลตัวอย่าง: TRANSACTIONS Table

TRANSACTION_IDORDER_ID
IRN22345A23118
IRN22345A45901
IRN22345A67990
IRN56902A23119
IRN99781A67921
IRN56902A23167

ผลลัพธ์ Query

TRANSACTION_IDCOUNT(ORDER_ID)
IRN223453
IRN569022
IRN997811

คำอธิบาย

  • GROUP BY TRANSACTION_ID: จัดกลุ่มแถวที่มี TRANSACTION_ID เหมือนกัน
  • COUNT(ORDER_ID): นับจำนวน ORDER_ID ในแต่ละกลุ่ม (ไม่นับ NULL)
  • ผลลัพธ์: 1 แถวต่อ 1 TRANSACTION_ID

ขยาย: เพิ่มเงื่อนไข HAVING

SELECT TRANSACTION_ID, COUNT(ORDER_ID) AS order_count
FROM TRANSACTIONS
GROUP BY TRANSACTION_ID
HAVING COUNT(ORDER_ID) > 1;

แสดงเฉพาะ Transaction ที่มี Order มากกว่า 1

ฟังก์ชัน Aggregate อื่นๆ

ฟังก์ชันคำอธิบาย
COUNT(*)นับจำนวนแถว (รวม NULL)
COUNT(col)นับค่า Non-NULL ของคอลัมน์
SUM(col)ผลรวม
AVG(col)ค่าเฉลี่ย
MIN/MAX(col)ค่าต่ำสุด/สูงสุด
STDDEV(col)Standard Deviation

Best Practices

  • SELECT เฉพาะคอลัมน์ใน GROUP BY หรือ Aggregate Function
  • ใช้ Alias (AS order_count) เพื่ออ่านง่าย
  • WHERE กรองก่อน GROUP BY, HAVING กรองหลัง GROUP BY
  • Index บน GROUP BY Column ช่วยประสิทธิภาพ

MySQL vs DB2

Syntax นี้ใช้ได้ใน MySQL, PostgreSQL, Oracle, SQL Server, DB2 เหมือนกัน (Standard SQL)