Fungsi agregat SQL, GROUP BY, HAVING, serta agregat distinct/lanjutan yang dipetakan ke nilai balik dan contoh satu baris pada tabel orders.
Fungsi agregat menciutkan banyak baris menjadi satu hasil skalar. GROUP BY mempartisi baris per kunci sebelum agregasi. HAVING menyaring grup setelah agregasi. Input NULL dilewati oleh semua agregat kecuali COUNT(*).
Tabel referensi · 29 entri
Fungsi agregat SQLExplained
29 of 29 rows
Skalar
Jumlah nilai input non-NULL; COUNT(*) menghitung semua baris.
SELECT COUNT(*) FROM orders
Jumlah nilai numerik non-NULL. Mengembalikan NULL pada himpunan kosong.
SELECT SUM(total) FROM orders
Rata-rata hitung nilai numerik non-NULL. Input NULL diabaikan.
SELECT AVG(total) FROM orders
Nilai non-NULL terkecil pada semua tipe yang bisa dibandingkan.
SELECT MIN(total) FROM orders
Nilai non-NULL terbesar pada semua tipe yang bisa dibandingkan.
SELECT MAX(total) FROM orders
Dikelompokkan
Mempartisi baris input per kunci; agregat berjalan per partisi.
SELECT user_id, SUM(total) FROM orders GROUP BY user_id
Predikat yang dievaluasi per grup setelah agregasi. Menggantikan WHERE untuk agregat.
SELECT user_id, COUNT(*) FROM orders GROUP BY user_id HAVING COUNT(*) > 5
Beberapa agregat dihitung per grup dalam satu pass.
SELECT user_id, COUNT(*), SUM(total), AVG(total) FROM orders GROUP BY user_id
Menghitung beberapa pengelompokan dalam satu statement; kunci di luar set saat ini mengembalikan NULL.
SELECT user_id, region, SUM(total) FROM orders GROUP BY GROUPING SETS ((user_id), (region), ())
Singkatan untuk grouping set berbasis hierarki; menambahkan subtotal dan total keseluruhan.
SELECT region, user_id, SUM(total) FROM orders GROUP BY ROLLUP (region, user_id)
Singkatan untuk setiap kombinasi kunci yang didaftar sebagai grouping set.
SELECT region, user_id, SUM(total) FROM orders GROUP BY CUBE (region, user_id)
Mencampur kunci grup biasa dengan grouping set dalam satu klausa.
SELECT user_id, region, SUM(total) FROM orders GROUP BY user_id, GROUPING SETS ((region), ())
Menyimpan baris pertama per kunci sesuai urutan sort. Ekstensi Postgres.
SELECT DISTINCT ON (user_id) user_id, total FROM orders ORDER BY user_id, created_at DESC
Distinct dan lanjutan
Jumlah nilai unik non-NULL. Mendeduplikasi lebih dulu.
SELECT COUNT(DISTINCT user_id) FROM orders
Memperkirakan jumlah nilai distinct dengan galat terbatas; dibuat untuk input besar.
SELECT APPROX_COUNT_DISTINCT(user_id) FROM orders
Menggabungkan string non-NULL dengan pembatas.
SELECT STRING_AGG(user_id::text, ',') FROM orders
Menggabungkan string non-NULL; nama MySQL untuk STRING_AGG.
SELECT GROUP_CONCAT(user_id SEPARATOR ',') FROM orders
Mengumpulkan nilai input non-NULL ke dalam array.
SELECT ARRAY_AGG(total) FROM orders
Mengumpulkan baris input ke dalam array JSON; bentuk JSONB menyimpan biner terurai.
SELECT JSONB_AGG(user_id) FROM orders
TRUE bila setiap / salah satu nilai input non-NULL bernilai benar.
SELECT BOOL_AND(total > 0), BOOL_OR(total > 100) FROM orders
Alias standar untuk BOOL_AND.
SELECT EVERY(total > 0) FROM orders
Persentil terinterpolasi / peringkat-terdekat atas input terurut; memerlukan WITHIN GROUP.
SELECT PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY total) FROM orders
Nilai input paling sering muncul; agregat ordered-set di Postgres.
SELECT MODE() WITHIN GROUP (ORDER BY total) FROM orders
Meneruskan urutan sort ke agregat ordered-set dan hypothetical-set.
SELECT RANK(500) WITHIN GROUP (ORDER BY total) FROM orders
Membatasi agregat pada baris yang lolos kondisi.
SELECT COUNT(*) FILTER (WHERE total > 100) FROM orders
Mengurutkan nilai sebelum digabungkan atau dikumpulkan oleh agregat.
SELECT STRING_AGG(user_id::text, ',' ORDER BY user_id) FROM orders
COUNT(*) dan COUNT(1) menghitung setiap baris; COUNT(col) melewatkan input NULL.
SELECT COUNT(*), COUNT(total), COUNT(1) FROM orders
Simpangan baku sampel dari nilai numerik non-NULL. STDDEV_POP memberikan bentuk populasi; default nama polos berbeda per mesin.
SELECT STDDEV(total) FROM orders
Variansi sampel dari nilai numerik non-NULL (kuadrat STDDEV). VAR_SAMP dan VAR_POP menamai setiap bentuk.