Hàm tổng hợp SQL, GROUP BY, HAVING và các hàm tổng hợp distinct/nâng cao, kèm giá trị trả về và ví dụ một dòng trên bảng orders.
Hàm tổng hợp gộp nhiều dòng thành một kết quả vô hướng. GROUP BY chia dòng theo khóa trước khi tổng hợp. HAVING lọc nhóm sau khi tổng hợp. Giá trị NULL bị bỏ qua bởi mọi hàm tổng hợp trừ COUNT(*).
Bảng tham chiếu · 29 mục
Hàm tổng hợp SQLExplained
29 of 29 rows
Vô hướng
Số lượng giá trị đầu vào khác NULL; COUNT(*) đếm tất cả các dòng.
SELECT COUNT(*) FROM orders
Tổng của các giá trị số khác NULL. Trả về NULL trên tập rỗng.
SELECT SUM(total) FROM orders
Trung bình cộng của các giá trị số khác NULL. Bỏ qua giá trị NULL.
SELECT AVG(total) FROM orders
Giá trị khác NULL nhỏ nhất trên bất kỳ kiểu nào có thể so sánh.
SELECT MIN(total) FROM orders
Giá trị khác NULL lớn nhất trên bất kỳ kiểu nào có thể so sánh.
SELECT MAX(total) FROM orders
Có nhóm
Chia các dòng đầu vào theo khóa; hàm tổng hợp chạy trên từng phân vùng.
SELECT user_id, SUM(total) FROM orders GROUP BY user_id
Điều kiện được đánh giá theo từng nhóm sau khi tổng hợp. Thay thế WHERE cho hàm tổng hợp.
SELECT user_id, COUNT(*) FROM orders GROUP BY user_id HAVING COUNT(*) > 5
Nhiều hàm tổng hợp được tính cho từng nhóm trong một lần quét.
SELECT user_id, COUNT(*), SUM(total), AVG(total) FROM orders GROUP BY user_id
Tính nhiều cách nhóm trong một câu lệnh; khóa nằm ngoài tập hiện tại trả về NULL.
SELECT user_id, region, SUM(total) FROM orders GROUP BY GROUPING SETS ((user_id), (region), ())
Viết tắt của grouping sets theo phân cấp; thêm tiểu tổng và tổng toàn bộ.
SELECT region, user_id, SUM(total) FROM orders GROUP BY ROLLUP (region, user_id)
Viết tắt của mọi tổ hợp của các khóa được liệt kê thành grouping sets.
SELECT region, user_id, SUM(total) FROM orders GROUP BY CUBE (region, user_id)
Trộn khóa nhóm thường với grouping sets trong cùng một mệnh đề.
SELECT user_id, region, SUM(total) FROM orders GROUP BY user_id, GROUPING SETS ((region), ())
Giữ dòng đầu tiên của từng khóa theo thứ tự sắp xếp. Phần mở rộng của Postgres.
SELECT DISTINCT ON (user_id) user_id, total FROM orders ORDER BY user_id, created_at DESC
Distinct và nâng cao
Số lượng giá trị khác NULL và không trùng lặp. Loại trùng trước khi đếm.
SELECT COUNT(DISTINCT user_id) FROM orders
Ước lượng số lượng giá trị phân biệt với sai số có giới hạn; dành cho dữ liệu đầu vào lớn.
SELECT APPROX_COUNT_DISTINCT(user_id) FROM orders
Nối các chuỗi khác NULL bằng một dấu phân cách.
SELECT STRING_AGG(user_id::text, ',') FROM orders
Nối các chuỗi khác NULL; tên của STRING_AGG trong MySQL.
SELECT GROUP_CONCAT(user_id SEPARATOR ',') FROM orders
Gom các giá trị đầu vào khác NULL thành một mảng.
SELECT ARRAY_AGG(total) FROM orders
Gom các dòng đầu vào thành mảng JSON; dạng JSONB lưu nhị phân đã phân tích.
SELECT JSONB_AGG(user_id) FROM orders
TRUE khi mọi / bất kỳ giá trị đầu vào khác NULL là true.
SELECT BOOL_AND(total > 0), BOOL_OR(total > 100) FROM orders
Bí danh chuẩn của BOOL_AND.
SELECT EVERY(total > 0) FROM orders
Phân vị nội suy / xếp hạng gần nhất trên đầu vào đã sắp xếp; yêu cầu WITHIN GROUP.
SELECT PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY total) FROM orders
Giá trị đầu vào xuất hiện nhiều nhất; hàm tổng hợp tập có thứ tự trong Postgres.
SELECT MODE() WITHIN GROUP (ORDER BY total) FROM orders
Truyền thứ tự sắp xếp cho các hàm tổng hợp tập có thứ tự và tập giả định.
SELECT RANK(500) WITHIN GROUP (ORDER BY total) FROM orders
Giới hạn hàm tổng hợp trong các dòng thỏa điều kiện.
SELECT COUNT(*) FILTER (WHERE total > 100) FROM orders
Sắp xếp các giá trị trước khi hàm tổng hợp nối hoặc gom chúng.
SELECT STRING_AGG(user_id::text, ',' ORDER BY user_id) FROM orders
COUNT(*) và COUNT(1) đếm mọi dòng; COUNT(col) bỏ qua giá trị NULL.
SELECT COUNT(*), COUNT(total), COUNT(1) FROM orders
Độ lệch chuẩn mẫu của các giá trị số khác NULL. STDDEV_POP cho dạng tổng thể; mặc định của tên trần khác nhau theo từng engine.
SELECT STDDEV(total) FROM orders
Phương sai mẫu của các giá trị số khác NULL (bình phương của STDDEV). VAR_SAMP và VAR_POP là tên riêng của từng dạng.