Fungsi LISTAGG - Amazon Redshift

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Fungsi LISTAGG

Untuk setiap grup dalam kueri, fungsi agregat LISTAGG mengurutkan baris untuk grup tersebut sesuai dengan ekspresi ORDER BY, lalu menggabungkan nilai menjadi satu string.

Sintaks

LISTAGG( [DISTINCT] aggregate_expression [, 'delimiter' ] ) [ WITHIN GROUP (ORDER BY order_list) ]

Argumen

DISTINCT

Klausa yang menghilangkan nilai duplikat dari ekspresi yang ditentukan sebelum menggabungkan. Spasi trailing diabaikan. Misalnya, string 'a' dan 'a ' diperlakukan sebagai duplikat. LISTAGG menggunakan nilai pertama yang ditemui. Untuk informasi selengkapnya, lihat Signifikansi trailing blank.

aggregate_expression

Ekspresi yang valid, seperti nama kolom, yang memberikan nilai untuk digabungkan. Nilai NULL dan string kosong diabaikan.

pembatas

Konstanta string untuk memisahkan nilai gabungan. Default-nya adalah NULL.

DALAM GRUP (PESANAN BERDASARKAN order_list)

Sebuah klausa yang menentukan urutan dari nilai agregat.

Pengembalian

VARCHAR (MAKS). Jika set hasil lebih besar dari ukuran VARCHAR maksimum, LISTAGG mengembalikan kesalahan berikut:

Invalid operation: Result size exceeds LISTAGG limit

Catatan penggunaan

  • Jika pernyataan menyertakan beberapa fungsi LISTAGG yang menggunakan klausa WITHERE GROUP, setiap klausa WITHIN GROUP harus menggunakan nilai ORDER BY yang sama.

    Misalnya, pernyataan berikut mengembalikan kesalahan.

    SELECT LISTAGG(sellerid) WITHIN GROUP (ORDER BY dateid) AS sellers, LISTAGG(dateid) WITHIN GROUP (ORDER BY sellerid) AS dates FROM sales;

    Pernyataan berikut berjalan dengan sukses.

    SELECT LISTAGG(sellerid) WITHIN GROUP (ORDER BY dateid) AS sellers, LISTAGG(dateid) WITHIN GROUP (ORDER BY dateid) AS dates FROM sales; SELECT LISTAGG(sellerid) WITHIN GROUP (ORDER BY dateid) AS sellers, LISTAGG(dateid) AS dates FROM sales;

Contoh

Contoh berikut menggabungkan ID penjual, diurutkan berdasarkan ID penjual.

SELECT LISTAGG(sellerid, ', ') WITHIN GROUP (ORDER BY sellerid) FROM sales WHERE eventid = 4337; listagg ---------------------------------------------------------------------------------------------------------------------------------------- 380, 380, 1178, 1178, 1178, 2731, 8117, 12905, 32043, 32043, 32043, 32432, 32432, 38669, 38750, 41498, 45676, 46324, 47188, 47188, 48294

Contoh berikut menggunakan DISTINCT untuk mengembalikan daftar ID penjual unik.

SELECT LISTAGG(DISTINCT sellerid, ', ') WITHIN GROUP (ORDER BY sellerid) FROM sales WHERE eventid = 4337; listagg ------------------------------------------------------------------------------------------- 380, 1178, 2731, 8117, 12905, 32043, 32432, 38669, 38750, 41498, 45676, 46324, 47188, 48294

Contoh berikut menggabungkan ID penjual dalam urutan tanggal.

SELECT LISTAGG(sellerid, ', ') WITHIN GROUP (ORDER BY dateid) FROM sales WHERE eventid = 4337; listagg ----------------------------------------------------------------------------------------------------------------------------------------- 41498, 47188, 47188, 1178, 1178, 1178, 380, 45676, 46324, 48294, 32043, 32043, 32432, 12905, 8117, 38750, 2731, 32432, 32043, 380, 38669

Contoh berikut mengembalikan daftar tanggal penjualan yang dipisahkan pipa untuk pembeli dengan ID 660.

SELECT LISTAGG( (SELECT caldate FROM date WHERE date.dateid=sales.dateid), ' | ' ) WITHIN GROUP (ORDER BY sellerid DESC, salesid ASC) FROM sales WHERE buyerid = 660; listagg ------------------------------------------------- 2008-07-16 | 2008-07-09 | 2008-01-01 | 2008-10-26

Contoh berikut mengembalikan daftar ID penjualan yang dipisahkan koma untuk ID pembeli 660, 661, dan 662.

SELECT buyerid, LISTAGG(salesid,', ') WITHIN GROUP (ORDER BY salesid) AS sales_id FROM sales WHERE buyerid BETWEEN 660 AND 662 GROUP BY buyerid ORDER BY buyerid; buyerid | sales_id --------+----------------------------------------------------- 660 | 32872, 33095, 33514, 34548 661 | 19951, 20517, 21695, 21931 662 | 3318, 3823, 4215, 51980, 53202, 55908, 57832, 171603