3.1 จัดกลุ่มตามคำสั่ง
ภาษา SQL มีประสิทธิภาพมาก นอกจากการดึงข้อมูลอย่างง่ายแล้ว ยังช่วยให้คุณจัดกลุ่มข้อมูลในเวลาสืบค้นได้อีกด้วย เช่น อยากทราบว่าสินค้าแต่ละยี่ห้อมีกี่ชนิด ทำอย่างไร?
มีตัวดำเนินการพิเศษสำหรับสิ่งนี้GROUP BY
นี่คือวิธีการเขียน
GROUP BY column
ลองเขียนแบบสอบถามที่ขอให้ SQL แสดงจำนวนประเภทผลิตภัณฑ์สำหรับแต่ละยี่ห้อ คำขอดังกล่าวจะมีลักษณะดังนี้:
SELECT brand, COUNT(*)
FROM product
GROUP BY brand
คุณจะได้รับผลการสืบค้นดังต่อไปนี้:
ยี่ห้อ | นับ(*) |
---|---|
(โมฆะ) | 2 |
บ๊อช | 4 |
อิเกีย | 6 |
แอลจี | 2 |
สมาร์ทฟลาวเวอร์ | 1 |
มาวิเคราะห์กันอย่างละเอียดว่าเราเขียนคำขอประเภทใดและได้ผลลัพธ์ประเภทใด เป็นผลให้เราเห็นสองคอลัมน์ รายการแรกที่มีรายชื่อแบรนด์ซึ่งเป็นตรรกะ เรา อยากได้ชุดของคู่"ยี่ห้อ --> ปริมาณ"
โปรดทราบว่าในชื่อแบรนด์มีคำNULL
. เรามีผลิตภัณฑ์ในแบรนด์ที่เขียนไว้NULL
และเราเห็นที่นี่ ไม่คาดคิดเล็กน้อย แต่เป็นประโยชน์ เราสามารถดูได้ว่ามีสินค้าที่ไม่มีแบรนด์อยู่กี่รายการ
ทีนี้มาดูคำขอให้ละเอียดยิ่งขึ้น เราต้องการทราบจำนวนสินค้าของแต่ละยี่ห้อ เราจึงเขียนGROUP BY brand
และในนั้นSELECT
เราเขียนยี่ห้อและการแสดงออกCOUNT(*)
COUNT(*)
เป็นฟังก์ชันการรวมที่เรียกว่าดำเนินการกับกลุ่มของแถว ในกรณีของเรา เธอเพียงแค่นับจำนวนของพวกเขา มีฟังก์ชั่นดังกล่าวมากมายและเราจะดูในภายหลัง
3.2 ข้อความค้นหาที่ซับซ้อนด้วย GROUP BY
ตอนนี้ เรามาเขียนแบบสอบถามโดยที่เราละทิ้งผลิตภัณฑ์ที่มีราคาน้อยกว่า 10 รายการก่อน จากนั้นจึงจัดกลุ่มผลิตภัณฑ์เหล่านั้น คำขอดังกล่าวจะมีลักษณะดังนี้:
SELECT brand, COUNT(*)
FROM product
WHERE price > 10
GROUP BY brand
คุณจะได้รับผลการสืบค้นดังต่อไปนี้:
ยี่ห้อ | นับ(*) |
---|---|
บ๊อช | 4 |
อิเกีย | 5 |
แอลจี | 2 |
สมาร์ทฟลาวเวอร์ | 1 |
สินค้า NULL ทั้งหมดหายไปจากตารางผลลัพธ์ของเรา เนื่องจากมีราคาถูกมากและจำนวนสินค้าของ IKEA ลดลง 1 จาก 6 เป็น 5
นี่แสดงว่าคุณใช้WHERE
บรรทัดที่ต้องการเพื่อกรองก่อน แล้วจึงใช้การจัดกลุ่มกับผลลัพธ์เท่านั้น
3.3 ชื่อคอลัมน์ของผลลัพธ์
โดยวิธีการนี้ คุณสามารถตั้งชื่อให้กับคอลัมน์ผลลัพธ์ได้ ดูว่าเซิร์ฟเวอร์แนะนำชื่ออย่างไรcount(*)
? ลองแทนที่ด้วยผลรวม คำขอดังกล่าวจะมีลักษณะดังนี้:
SELECT brand, COUNT(*) AS total
FROM product
WHERE price > 10
GROUP BY brand
คุณจะได้รับผลการสืบค้นดังต่อไปนี้:
ยี่ห้อ | ทั้งหมด |
---|---|
บ๊อช | 4 |
อิเกีย | 5 |
แอลจี | 2 |
สมาร์ทฟลาวเวอร์ | 1 |
คุณยังสามารถเปลี่ยนชื่อคอลัมน์ที่มีอยู่ ลองใช้แบบสอบถามที่ใช้ก่อนหน้านี้และเพิ่มชื่อใหม่ลงในคอลัมน์
SELECT
id AS product_id,
name AS product_name,
price
FROM product
WHERE price < 20 AND brand IS NOT NULL
คุณจะได้รับผลการสืบค้นดังต่อไปนี้:
รหัสผลิตภัณฑ์ | ชื่อผลิตภัณฑ์ | ราคา |
---|---|---|
2 | เก้าอี้ | 5.00 น |
8 | โคมไฟ | 15.00 น |
GO TO FULL VERSION