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 น