Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
PERCENTILE_ CONT fungsi
PERCENTILE_ CONT adalah fungsi distribusi terbalik yang mengasumsikan model distribusi kontinu. Dibutuhkan nilai persentil dan spesifikasi sortir, dan mengembalikan nilai interpolasi yang akan jatuh ke dalam nilai persentil yang diberikan sehubungan dengan spesifikasi sortir.
PERCENTILE_ CONT menghitung interpolasi linier antara nilai setelah mengurutkannya. Menggunakan nilai persentil (P)
dan jumlah baris bukan nol (N)
dalam grup agregasi, fungsi menghitung nomor baris setelah mengurutkan baris sesuai dengan spesifikasi pengurutan. Nomor baris ini (RN)
dihitung sesuai dengan RN = (1+ (P*(N-1))
rumus. Hasil akhir dari fungsi agregat dihitung dengan interpolasi linier antara nilai-nilai dari baris pada nomor baris dan. CRN = CEILING(RN)
FRN = FLOOR(RN)
Hasil akhirnya adalah sebagai berikut.
Jika (CRN = FRN = RN)
maka hasilnya adalah (value of expression from
row at RN)
Jika tidak, hasilnya adalah sebagai berikut:
(CRN - RN) * (value of expression for row at FRN) + (RN - FRN) * (value of
expression for row at CRN)
.
Sintaks
PERCENTILE_CONT(percentile) WITHIN GROUP(ORDER BY expr)
Argumen
- persentil
-
Konstanta numerik antara 0 dan 1.
NULL
nilai diabaikan dalam perhitungan. - expr
-
Menentukan nilai numerik atau tanggal/waktu untuk mengurutkan dan menghitung persentil atas.
Pengembalian
Tipe pengembalian ditentukan oleh tipe data ekspresi ORDER BY dalam WITHIN GROUP klausa. Tabel berikut menunjukkan tipe kembali untuk setiap tipe data ekspresi ORDER BY.
Jenis masukan | Jenis pengembalian |
---|---|
INT2 , INT4 , INT8 , NUMERIC , DECIMAL |
DECIMAL |
FLOAT , DOUBLE |
DOUBLE |
DATE |
DATE |
TIMESTAMP |
TIMESTAMP |
TIMESTAMPTZ |
TIMESTAMPTZ |
Catatan penggunaan
Jika ekspresi ORDER BY adalah tipe DECIMAL data yang ditentukan dengan presisi maksimum 38 digit, ada kemungkinan PERCENTILE _ CONT akan mengembalikan hasil yang tidak akurat atau kesalahan. Jika nilai pengembalian CONT fungsi PERCENTILE _ melebihi 38 digit, hasilnya terpotong agar sesuai, yang menyebabkan hilangnya presisi.. Jika, selama interpolasi, hasil antara melebihi presisi maksimum, luapan numerik terjadi dan fungsi mengembalikan kesalahan. Untuk menghindari kondisi ini, sebaiknya gunakan tipe data dengan presisi lebih rendah atau mentransmisikan ekspresi ORDER BY ke presisi yang lebih rendah.
Jika pernyataan menyertakan beberapa panggilan ke fungsi agregat berbasis sortir (LISTAGG, PERCENTILE _, atauMEDIAN)CONT, semuanya harus menggunakan nilai BY yang samaORDER. Perhatikan bahwa MEDIAN menerapkan urutan implisit oleh pada nilai ekspresi.
Misalnya, pernyataan berikut mengembalikan kesalahan.
SELECT TOP 10 salesid, SUM(pricepaid), PERCENTILE_CONT(0.6) WITHIN GROUP(ORDER BY salesid), MEDIAN(pricepaid) FROM sales GROUP BY salesid, pricepaid;
An error occurred when executing the SQL command: SELECT TOP 10 salesid, SUM(pricepaid), PERCENTILE_CONT(0.6) WITHIN GROUP(ORDER BY salesid), MEDIAN(pricepaid) FROM sales GROUP BY salesid, pricepaid; ERROR: within group ORDER BY clauses for aggregate functions must be the same
Pernyataan berikut berjalan dengan sukses.
SELECT TOP 10 salesid, SUM(pricepaid), PERCENTILE_CONT(0.6) WITHIN GROUP(ORDER BY salesid), MEDIAN(salesid) FROM sales GROUP BY salesid, pricepaid;
Contoh
Contoh berikut menggunakan database TICKIT sampel. Untuk informasi selengkapnya, lihat Database sampel.
Contoh berikut menunjukkan bahwa PERCENTILE _ CONT (0,5) menghasilkan hasil yang sama sepertiMEDIAN.
SELECT TOP 10 DISTINCT sellerid, qtysold, PERCENTILE_CONT(0.5) WITHIN GROUP(ORDER BY qtysold), MEDIAN(qtysold) FROM sales GROUP BY sellerid, qtysold;
+----------+---------+-----------------+--------+ | sellerid | qtysold | percentile_cont | median | +----------+---------+-----------------+--------+ | 2 | 2 | 2 | 2 | | 26 | 1 | 1 | 1 | | 33 | 1 | 1 | 1 | | 38 | 1 | 1 | 1 | | 43 | 1 | 1 | 1 | | 48 | 2 | 2 | 2 | | 48 | 3 | 3 | 3 | | 77 | 4 | 4 | 4 | | 85 | 4 | 4 | 4 | | 95 | 2 | 2 | 2 | +----------+---------+-----------------+--------+
Contoh berikut menemukan PERCENTILE _ CONT (0,5) dan PERCENTILE _ CONT (0,75) untuk kuantitas yang dijual untuk setiap sellerid dalam tabel. SALES
SELECT sellerid, PERCENTILE_CONT(0.5) WITHIN GROUP(ORDER BY qtysold) as pct_05, PERCENTILE_CONT(0.75) WITHIN GROUP(ORDER BY qtysold) as pct_075 FROM sales GROUP BY sellerid ORDER BY sellerid LIMIT 10;
+----------+--------+---------+ | sellerid | pct_05 | pct_075 | +----------+--------+---------+ | 1 | 1.5 | 1.75 | | 2 | 2 | 2.25 | | 3 | 2 | 3 | | 4 | 2 | 2 | | 5 | 1 | 1.5 | | 6 | 1 | 1 | | 7 | 1.5 | 1.75 | | 8 | 1 | 1 | | 9 | 4 | 4 | | 12 | 2 | 3.25 | +----------+--------+---------+
Untuk memverifikasi hasil kueri sebelumnya untuk sellerid pertama, gunakan contoh berikut.
SELECT qtysold FROM sales WHERE sellerid=1;
+---------+ | qtysold | +---------+ | 2 | | 1 | +---------+