จัดกลุ่มตาม และ มี
หากต้องการรับข้อมูลเชิงลึกมากขึ้นและจัดระเบียบข้อมูลภายในฐานข้อมูลให้ดียิ่งขึ้น SQL จะแนะนําคําสั่งและGROUP BYมีประสิทธิภาพHAVING
เครื่องมือเหล่านี้ช่วยให้คุณสามารถแปลงข้อมูลดิบให้เป็นข้อสรุปที่มีความหมายโดยการจัดประเภทแถวและใช้ฟังก์ชันการรวม ทําให้ง่ายต่อการวิเคราะห์แนวโน้ม ระบุรูปแบบ หรือสร้างรายงานที่ปรับให้เหมาะกับประเภทเฉพาะ
จัดกลุ่มตาม
ในการวิเคราะห์ข้อมูลตามประเภทหรือกลุ่ม SQL มี GROUP BY ส่วนคําสั่ง ส่วนคําสั่งนี้จะจัดประเภทแถวโดยยึดตามค่าในคอลัมน์ที่ระบุ ซึ่งแบ่งพาร์ติชันข้อมูลเป็นชุดย่อยได้อย่างมีประสิทธิภาพ
พลังที่แท้จริงของ GROUP BY จะถูกเปิดเผยเมื่อใช้กับฟังก์ชันการรวม ฟังก์ชันการรวม เช่น COUNT(), ,SUM()AVG()MIN(), และMAX()ทําการคํานวณบนกลุ่มเหล่านี้ ช่วยให้คุณสามารถสร้างสถิติสรุปสําหรับแต่ละประเภทได้
ตัวอย่างเช่น คุณสามารถใช้ GROUP BY เพื่อคํานวณ: -total ยอดขาย SUM() สําหรับแต่ละหมวดหมู่ผลิตภัณฑ์ -average ราคา AVG() ของผลิตภัณฑ์จากซัพพลายเออร์แต่ละราย -number ของลูกค้า COUNT() ในแต่ละเมืองได้
SELECT category_id, AVG(price)
FROM sales.products
GROUP BY category_id;
คิวรีนี้จะดึงข้อมูลราคาเฉลี่ยของผลิตภัณฑ์ภายในแต่ละประเภทโดยการจัดกลุ่มแถวของsales.productsตารางตามcategory_id โดย AVG() การใช้ฟังก์ชัน กับ price คอลัมน์ คิวรีจะคํานวณค่าเฉลี่ยของราคาสําหรับผลิตภัณฑ์ทั้งหมดภายใต้ ที่แตกต่างกัน category_idทั้งหมด
GROUP BY ส่วนคําสั่งไม่จําเป็นต้องจับคู่กับฟังก์ชันการรวมเสมอไป ในขณะที่มักจะใช้ควบคู่ไปกับฟังก์ชันการรวมเพื่อทําการคํานวณข้อมูลที่จัดกลุ่ม GROUP BY แต่ยังสามารถใช้เพื่อจัดระเบียบข้อมูลลงในกลุ่มเพื่อวัตถุประสงค์อื่น ๆ เช่น การเรียกคืนชุดคอลัมน์ที่แตกต่างกัน
SELECT category_id
FROM sales.products
GROUP BY category_id;
คิวรีนี้จะจัดกลุ่มแถวโดยไม่category_idทําการรวมใด ๆ เพียงแค่แสดงรายการที่แตกต่างกันcategory_idแต่ละรายการในตารางsales.products
มี
ใน SQL WHERE ไม่สามารถใช้ส่วนคําสั่งเพื่อกรองผลลัพธ์ของฟังก์ชันการรวมได้
หากต้องการกรองกลุ่มที่สร้างขึ้นโดย GROUP BY ส่วนคําสั่งตามผลลัพธ์ของฟังก์ชันการรวม คุณสามารถใช้ส่วน HAVING คําสั่งได้
HAVINGคิดว่าเป็นWHEREส่วนคําสั่งสําหรับกลุ่ม: มันช่วยให้คุณสามารถใช้เงื่อนไขกับข้อมูลสรุปที่สร้างขึ้นโดยฟังก์ชันการรวมช่วยให้คุณสามารถปรับปรุงการวิเคราะห์ของคุณเพื่อมุ่งเน้นไปยังกลุ่มที่เกี่ยวข้อง
SELECT category_id, AVG(price)
FROM sales.products
GROUP BY category_id
HAVING AVG(price) > 30;
คิวรีนี้จะคํานวณค่าเฉลี่ยpriceของผลิตภัณฑ์ภายในแต่ละประเภทโดยการจัดกลุ่มแถวของsales.productsตารางตามcategory_id จากนั้นจะกรองผลลัพธ์เพื่อรวมเฉพาะหมวดหมู่ที่มีค่าเฉลี่ย price เกิน 30 โดยใช้ HAVING ส่วนคําสั่ง