Skip to content

ฟังก์ชัน Aggregate ของ SQL อธิบาย

ฟังก์ชัน aggregate ของ SQL, GROUP BY, HAVING และ aggregate แบบ distinct/ขั้นสูง พร้อมค่าที่ส่งกลับและตัวอย่างหนึ่งบรรทัดบนตาราง orders

ฟังก์ชัน aggregate ยุบหลายแถวให้เหลือผลลัพธ์สเกลาร์เดียว GROUP BY แบ่งแถวตามคีย์ก่อนทำการรวม HAVING กรองกลุ่มหลังการรวม และค่า NULL จะถูกข้ามโดยทุก aggregate ยกเว้น COUNT(*)

ตารางอ้างอิง · 29 รายการ
29 of 29 rows
แบบสเกลาร์
นับจำนวนค่าอินพุตที่ไม่ใช่ NULL ส่วน COUNT(*) จะนับทุกแถวSELECT COUNT(*) FROM orders
ผลรวมของค่าตัวเลขที่ไม่ใช่ NULL คืนค่า NULL เมื่อชุดข้อมูลว่างSELECT SUM(total) FROM orders
ค่าเฉลี่ยเลขคณิตของค่าตัวเลขที่ไม่ใช่ NULL โดยละเว้นค่า NULLSELECT AVG(total) FROM orders
ค่าที่น้อยที่สุดที่ไม่ใช่ NULL จากชนิดข้อมูลใดก็ได้ที่เปรียบเทียบได้SELECT MIN(total) FROM orders
ค่าที่มากที่สุดที่ไม่ใช่ NULL จากชนิดข้อมูลใดก็ได้ที่เปรียบเทียบได้SELECT MAX(total) FROM orders
แบบจัดกลุ่ม
แบ่งแถวอินพุตตามคีย์ แล้วรัน aggregate แยกตามแต่ละพาร์ติชันSELECT user_id, SUM(total) FROM orders GROUP BY user_id
เงื่อนไขที่ประเมินต่อกลุ่มหลังการรวม ใช้แทน WHERE สำหรับ aggregateSELECT user_id, COUNT(*) FROM orders GROUP BY user_id HAVING COUNT(*) > 5
คำนวณ aggregate หลายตัวต่อกลุ่มในการผ่านข้อมูลครั้งเดียวSELECT user_id, COUNT(*), SUM(total), AVG(total) FROM orders GROUP BY user_id
คำนวณการจัดกลุ่มหลายแบบในคำสั่งเดียว คีย์ที่อยู่นอกเซตปัจจุบันจะคืนค่า NULLSELECT user_id, region, SUM(total) FROM orders GROUP BY GROUPING SETS ((user_id), (region), ())
รูปย่อของ grouping sets แบบลำดับชั้น เพิ่ม subtotal และ grand totalSELECT region, user_id, SUM(total) FROM orders GROUP BY ROLLUP (region, user_id)
รูปย่อของทุกการจับคู่คีย์ที่ระบุในรูปแบบ grouping setsSELECT region, user_id, SUM(total) FROM orders GROUP BY CUBE (region, user_id)
ผสมคีย์จัดกลุ่มแบบปกติเข้ากับ grouping sets ใน clause เดียวSELECT user_id, region, SUM(total) FROM orders GROUP BY user_id, GROUPING SETS ((region), ())
เก็บแถวแรกของแต่ละคีย์ตามลำดับการเรียง เป็นส่วนขยายของ PostgresSELECT DISTINCT ON (user_id) user_id, total FROM orders ORDER BY user_id, created_at DESC
Distinct และขั้นสูง
นับจำนวนค่าที่ไม่ซ้ำและไม่ใช่ NULL โดยลบค่าซ้ำออกก่อนนับSELECT COUNT(DISTINCT user_id) FROM orders
ประมาณจำนวนค่าที่ไม่ซ้ำด้วยค่าคลาดเคลื่อนที่จำกัดไว้ ออกแบบมาสำหรับข้อมูลขนาดใหญ่SELECT APPROX_COUNT_DISTINCT(user_id) FROM orders
ต่อสตริงที่ไม่ใช่ NULL เข้าด้วยกันด้วยตัวคั่นSELECT STRING_AGG(user_id::text, ',') FROM orders
ต่อสตริงที่ไม่ใช่ NULL เข้าด้วยกัน เป็นชื่อของ STRING_AGG ใน MySQLSELECT GROUP_CONCAT(user_id SEPARATOR ',') FROM orders
รวบรวมค่าอินพุตที่ไม่ใช่ NULL ไว้ในอาร์เรย์SELECT ARRAY_AGG(total) FROM orders
รวบรวมแถวอินพุตเป็นอาร์เรย์ JSON รูปแบบ JSONB เก็บเป็นไบนารีที่แยกวิเคราะห์แล้วSELECT JSONB_AGG(user_id) FROM orders
เป็น TRUE เมื่อค่าอินพุตที่ไม่ใช่ NULL ทุกค่า / ค่าใดค่าหนึ่งเป็น trueSELECT BOOL_AND(total > 0), BOOL_OR(total > 100) FROM orders
ชื่อแทนตามมาตรฐานของ BOOL_ANDSELECT EVERY(total > 0) FROM orders
เปอร์เซ็นไทล์แบบประมาณค่า / แบบอันดับใกล้ที่สุดจากอินพุตที่เรียงแล้ว ต้องใช้ WITHIN GROUPSELECT PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY total) FROM orders
ค่าอินพุตที่พบบ่อยที่สุด เป็น ordered-set aggregate ใน PostgresSELECT MODE() WITHIN GROUP (ORDER BY total) FROM orders
ส่งลำดับการเรียงให้กับ ordered-set และ hypothetical-set aggregateSELECT RANK(500) WITHIN GROUP (ORDER BY total) FROM orders
จำกัด aggregate ไว้เฉพาะแถวที่ผ่านเงื่อนไขSELECT COUNT(*) FILTER (WHERE total > 100) FROM orders
เรียงค่าก่อนที่ aggregate จะนำไปต่อสตริงหรือรวบรวมSELECT STRING_AGG(user_id::text, ',' ORDER BY user_id) FROM orders
COUNT(*) และ COUNT(1) นับทุกแถว ส่วน COUNT(col) ละเว้นค่า NULLSELECT COUNT(*), COUNT(total), COUNT(1) FROM orders
ส่วนเบี่ยงเบนมาตรฐานแบบตัวอย่างของค่าตัวเลขที่ไม่ใช่ NULL ส่วน STDDEV_POP ให้รูปแบบ population และค่าเริ่มต้นของชื่อเปล่านั้นต่างกันตามแต่ละเอนจินSELECT STDDEV(total) FROM orders
ความแปรปรวนแบบตัวอย่างของค่าตัวเลขที่ไม่ใช่ NULL (กำลังสองของ STDDEV) โดย VAR_SAMP และ VAR_POP คือชื่อเฉพาะของแต่ละรูปแบบSELECT VARIANCE(total) FROM orders