GROUP BY สำหรับคอลัมน์เดียวและหลายคอลัมน์
จัดกลุ่มแถวด้วยคอลัมน์หนึ่งคอลัมน์หรือหลายคอลัมน์เพื่อสร้างผลรวมย่อยและแจกแจงตามหมวดหมู่ พร้อมอ่านแผนการทำงานของคำค้น GROUP BY
GROUP BY สำหรับคอลัมน์เดียวและหลายคอลัมน์ เป็นบทเรียน SQL Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน SQL Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน
สิ่งที่ GROUP BY ทำ
GROUP BY จะแบ่งแถวออกเป็นกลุ่มตามค่าของคอลัมน์อย่างน้อยหนึ่งคอลัมน์ จากนั้นใช้ฟังก์ชันรวมกับแต่ละกลุ่ม
กลุ่มคอลัมน์เดียว
จำนวนคำสั่งซื้อทั้งหมดต่อผู้ใช้:
SELECT user_id, COUNT(*) AS order_count, SUM(total) AS revenue
FROM orders
GROUP BY user_id
ORDER BY revenue DESC;กลุ่มหลายคอลัมน์
กลุ่มย่อยตามหมวดหมู่และประเทศ:
SELECT country, category, SUM(total) AS revenue
FROM orders o
JOIN products p ON p.id = o.product_id
JOIN users u ON u.id = o.user_id
GROUP BY country, category
ORDER BY country, revenue DESC;คอลัมน์ทุกคอลัมน์ที่ระบุใน SELECT ต้องจัดกลุ่มหรือรวมค่า
กฎมาตรฐานของ SQL:
-- WRONG — email is neither grouped nor aggregated:
SELECT user_id, email, COUNT(*)
FROM orders
GROUP BY user_id; -- ERROR
-- RIGHT — group by both, or use an aggregate:
SELECT user_id, MAX(email) AS email, COUNT(*)
FROM orders
GROUP BY user_id;GROUP BY ตามนิพจน์
จัดกลุ่มตามผลลัพธ์ของนิพจน์ เช่น การแบ่งตามช่วงเดือน:
SELECT date_trunc('month', created_at) AS month, SUM(total)
FROM orders
GROUP BY date_trunc('month', created_at)
ORDER BY month;GROUP BY ตามตำแหน่งหรือชื่อแทน
คุณสามารถจัดกลุ่มตามตำแหน่งหรือชื่อแทนในรายการ SELECT ได้ (PostgreSQL):
SELECT date_trunc('month', created_at) AS month, SUM(total)
FROM orders
GROUP BY month -- alias
ORDER BY 1; -- positionชุดการจัดกลุ่ม ROLLUP และ CUBE
คำนวณการจัดกลุ่มหลายรูปแบบในคำสั่งสอบถามเดียว เหมาะอย่างยิ่งสำหรับผลรวมย่อย:
SELECT country, category, SUM(total)
FROM orders o JOIN ...
GROUP BY ROLLUP (country, category);
-- Returns: per (country, category), per country, grand totalกลุ่มว่างไม่มีอยู่
GROUP BY จะแสดงเฉพาะกลุ่มที่มีอย่างน้อยหนึ่งแถว หากต้องการทุกหมวดหมู่ รวมถึงหมวดหมู่ที่ไม่มีคำสั่งซื้อ ให้ใช้ LEFT JOIN จากรายการหลัก แล้วจึงรวมค่า
GROUP BY และดัชนี
ตัววางแผนอาจใช้การรวมค่าแบบแฮช โดยสร้างตารางแฮชของกลุ่ม หรือใช้กลยุทธ์การเรียงลำดับแล้วจัดกลุ่ม ดัชนีบนคอลัมน์ที่ใช้จัดกลุ่มอาจทำให้วิธีที่สองทำงานได้รวดเร็ว
ฟังก์ชันหน้าต่างเทียบกับ GROUP BY
GROUP BY จะรวมหลายแถวให้เหลือเป็นแถวเดียว ส่วนฟังก์ชันหน้าต่างจะเพิ่มคอลัมน์ค่ารวมโดยยังคงทุกแถวไว้ เลือกเครื่องมือให้เหมาะสม ซึ่งจะอธิบายไว้ในบทเจาะลึกฟังก์ชันหน้าต่าง
ชื่อแทนใน HAVING เทียบกับ WHERE
ลำดับเชิงตรรกะคือ FROM → WHERE → GROUP BY → HAVING → SELECT โดย WHERE มองไม่เห็นค่ารวม แต่ HAVING มองเห็นได้
สรุป
GROUP BY เป็นเครื่องมือหลักของการทำรายงาน
- คอลัมน์ทุกคอลัมน์ที่ระบุใน SELECT ต้องจัดกลุ่มหรือรวมค่า
- จัดกลุ่มตามคอลัมน์ นิพจน์ หรือชื่อแทน
- ใช้
ROLLUP/CUBE/GROUPING SETSสำหรับตารางไขว้
ตรวจสอบความเข้าใจ
ในคำสั่งสอบถาม GROUP BY country รายการ SELECT สามารถมีคอลัมน์ city ที่ไม่ได้ผ่านการรวมค่าหรือการจัดกลุ่มได้หรือไม่
คำถามที่พบบ่อย
บทเรียน “GROUP BY สำหรับคอลัมน์เดียวและหลายคอลัมน์” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “GROUP BY สำหรับคอลัมน์เดียวและหลายคอลัมน์” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส SQL Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “GROUP BY สำหรับคอลัมน์เดียวและหลายคอลัมน์”
จัดกลุ่มแถวด้วยคอลัมน์หนึ่งคอลัมน์หรือหลายคอลัมน์เพื่อสร้างผลรวมย่อยและแจกแจงตามหมวดหมู่ พร้อมอ่านแผนการทำงานของคำค้น GROUP BY คุณปฏิบัติ SQL Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน SQL Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน SQL Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “GROUP BY สำหรับคอลัมน์เดียวและหลายคอลัมน์” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน SQL Academy นี้ได้ไหม
ได้ บทเรียน SQL Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- COUNT, SUM, AVG, MIN, MAX
- GROUP BY สำหรับคอลัมน์เดียวและหลายคอลัมน์
- HAVING เทียบกับ WHERE
- ข้อผิดพลาดที่พบบ่อย: NULL ในการรวมข้อมูล