เราสามารถนำตัวอย่างง่ายๆ
พิจารณาตารางที่ตั้งชื่อTableA
ด้วยค่าต่อไปนี้:
id firstname lastname Mark
-------------------------------------------------------------------
1 arun prasanth 40
2 ann antony 45
3 sruthy abc 41
6 new abc 47
1 arun prasanth 45
1 arun prasanth 49
2 ann antony 49
GROUP BY
ส่วนคำสั่ง SQL GROUP BY สามารถใช้ในคำสั่ง SELECT เพื่อรวบรวมข้อมูลจากหลาย ๆ ระเบียนและจัดกลุ่มผลลัพธ์ตามคอลัมน์อย่างน้อยหนึ่งคอลัมน์
ในคำที่ง่ายขึ้นคำสั่ง GROUP BY ถูกใช้ร่วมกับฟังก์ชั่นรวมเพื่อจัดกลุ่มผลลัพธ์ที่กำหนดโดยหนึ่งหรือมากกว่าหนึ่งคอลัมน์
ไวยากรณ์:
SELECT expression1, expression2, ... expression_n,
aggregate_function (aggregate_expression)
FROM tables
WHERE conditions
GROUP BY expression1, expression2, ... expression_n;
เราสามารถใช้GROUP BY
ในตารางของเรา:
select SUM(Mark)marksum,firstname from TableA
group by id,firstName
ผล:
marksum firstname
----------------
94 ann
134 arun
47 new
41 sruthy
ในตารางจริงของเราเรามี 7 แถวและเมื่อเรานำไปใช้GROUP BY id
เซิร์ฟเวอร์จะจัดกลุ่มผลลัพธ์ตามid
:
ในคำง่าย ๆ :
GROUP BY
ตามปกติแล้วที่นี่จะช่วยลดจำนวนแถวที่คืนกลับมาโดยการเลื่อนและคำนวณSum()
สำหรับแต่ละแถว
PARTITION BY
ก่อนที่จะไปที่พาร์ทิชันโดยให้เราดูOVER
ข้อ:
ตามคำจำกัดความของ MSDN:
ข้อ OVER กำหนดหน้าต่างหรือชุดของแถวที่ผู้ใช้ระบุภายในชุดผลลัพธ์แบบสอบถาม ฟังก์ชั่นหน้าต่างจะคำนวณค่าสำหรับแต่ละแถวในหน้าต่าง คุณสามารถใช้ OVER clause กับฟังก์ชั่นเพื่อคำนวณค่าที่สรุปรวมเช่นค่าเฉลี่ยเคลื่อนที่, ผลรวมสะสม, ผลรวมสะสมหรือจำนวน N สูงสุดต่อผลลัพธ์กลุ่ม
PARTITION BY จะไม่ลดจำนวนแถวที่ส่งคืน
เราสามารถใช้ PARTITION โดยในตารางตัวอย่างของเรา:
SELECT SUM(Mark) OVER (PARTITION BY id) AS marksum, firstname FROM TableA
ผลลัพธ์:
marksum firstname
-------------------
134 arun
134 arun
134 arun
94 ann
94 ann
41 sruthy
47 new
ดูผลลัพธ์ - มันจะแบ่งแถวและส่งคืนแถวทั้งหมดไม่เหมือน GROUP BY