0Pricing
SQL Academy · บทเรียน

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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. COUNT, SUM, AVG, MIN, MAX
  2. GROUP BY สำหรับคอลัมน์เดียวและหลายคอลัมน์
  3. HAVING เทียบกับ WHERE
  4. ข้อผิดพลาดที่พบบ่อย: NULL ในการรวมข้อมูล
← กลับไปที่ SQL Academy