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