PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

STRING_AGG() Fungsi di PostgreSQL

Di PostgreSQL, kita dapat menggunakan STRING_AGG() berfungsi untuk mengembalikan kolom dari kueri sebagai daftar yang dibatasi.

Sintaks

Sintaksnya seperti ini:

string_agg ( value text, delimiter text ) → text
string_agg ( value bytea, delimiter bytea ) → bytea

Kami juga dapat menggunakan ORDER BY klausa dan DISTINCT klausa dari dalam fungsi ini, yang mempengaruhi output dari fungsi. Selengkapnya di bawah ini.

Contoh

Misalkan kita menjalankan kueri berikut:

SELECT PetName 
FROM Pets;

Dan kita mendapatkan hasil sebagai berikut:

+---------+
| petname |
+---------+
| Fluffy  |
| Fetch   |
| Scratch |
| Wag     |
| Tweet   |
| Fluffy  |
| Bark    |
| Meow    |
+---------+
(8 rows)

Kita bisa menggunakan STRING_AGG() untuk mengembalikan semua baris itu sebagai daftar yang dibatasi.

Untuk melakukannya, berikan PetName kolom sebagai argumen pertama, dan pembatas pilihan kami sebagai argumen kedua:

SELECT STRING_AGG(PetName, ',') 
FROM Pets;

Hasil:

+-------------------------------------------------+
|                   string_agg                    |
+-------------------------------------------------+
| Fluffy,Fetch,Scratch,Wag,Tweet,Fluffy,Bark,Meow |
+-------------------------------------------------+
(1 row)

Mengubah Pembatas

Pada contoh sebelumnya, saya memilih koma sebagai pembatas. Ini dia dengan pembatas yang berbeda:

SELECT STRING_AGG(PetName, '-') 
FROM Pets;

Hasil:

Fluffy-Fetch-Scratch-Wag-Tweet-Fluffy-Bark-Meow

Kita bahkan dapat menggunakan string kosong untuk menghapus semua pemisah (sehingga nilainya digabungkan):

SELECT STRING_AGG(PetName, '') 
FROM Pets;

Dan kita mendapatkan hasil sebagai berikut:

FluffyFetchScratchWagTweetFluffyBarkMeow

Memesan

Kita dapat menggunakan ORDER BY klausa dalam STRING_AGG() berfungsi untuk mengurutkan outputnya sendiri:

SELECT STRING_AGG(PetName, ',' ORDER BY PetName ASC) FROM Pets;

Hasil:

Bark,Fetch,Fluffy,Fluffy,Meow,Scratch,Tweet,Wag

Itu dalam urutan menaik.

Ini dia dalam urutan menurun:

SELECT STRING_AGG(PetName, ',' ORDER BY PetName DESC) FROM Pets;

Hasil:

Wag,Tweet,Scratch,Meow,Fluffy,Fluffy,Fetch,Bark

Perhatikan bahwa ini hanya mengurutkan output dari STRING_AGG() fungsi – ini benar-benar tidak tergantung pada urutan apa pun yang diterapkan ke SELECT pernyataan itu sendiri.

Yang DISTINCT Klausa

Kita dapat menggunakan DISTINCT klausa untuk mengembalikan nilai unik. Dengan kata lain, jika ada nilai duplikat, hanya satu kemunculan yang dikembalikan:

SELECT STRING_AGG(DISTINCT PetName, ',' ORDER BY PetName ASC) FROM Pets;

Hasil:

Bark,Fetch,Fluffy,Meow,Scratch,Tweet,Wag

Dalam hal ini, Fluffy hanya muncul sekali. Saat kami menjalankannya tanpa kode DISTINCT klausa, Fluffy muncul dua kali:

SELECT STRING_AGG(PetName, ',' ORDER BY PetName ASC) FROM Pets;

Hasil:

Bark,Fetch,Fluffy,Fluffy,Meow,Scratch,Tweet,Wag

Hasil Kueri yang Dikelompokkan

Kami dapat menyertakan STRING_AGG() dalam kueri dengan GROUP BY klausa untuk mencapai hasil seperti ini:

SELECT 
    PetTypeId,
    STRING_AGG(PetName, ',' ORDER BY PetName ASC)
FROM Pets
GROUP BY PetTypeId
ORDER BY PetTypeId;

Hasil:

+-----------+-----------------------+
| pettypeid |      string_agg       |
+-----------+-----------------------+
|         1 | Tweet                 |
|         2 | Fluffy,Meow,Scratch   |
|         3 | Bark,Fetch,Fluffy,Wag |
+-----------+-----------------------+

Di database saya, nama jenis hewan peliharaan yang sebenarnya ada di tabel lain yang disebut PetTypes . Oleh karena itu, kami dapat menjalankan INNER JOIN pada PetTypes tabel untuk mendapatkan nama jenis hewan peliharaan yang sebenarnya:

SELECT 
    pt.PetType,
    STRING_AGG(p.PetName, ',' ORDER BY p.PetName ASC)
FROM Pets p
INNER JOIN PetTypes pt ON
p.PetTypeId = pt.PetTypeId
GROUP BY pt.PetType
ORDER BY pt.PetType ASC;

Hasil:

+---------+-----------------------+
| pettype |      string_agg       |
+---------+-----------------------+
| Bird    | Tweet                 |
| Cat     | Fluffy,Meow,Scratch   |
| Dog     | Bark,Fetch,Fluffy,Wag |
+---------+-----------------------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tips untuk Memantau PostgreSQL untuk Moodle

  2. Bagaimana cara memberikan 1.000.000 hasil basis data kepada klien API?

  3. Kembalikan dump pada mesin jarak jauh

  4. Kembalikan Nilai Non-Numerik dari Kolom Database PostgreSQL

  5. Cara Membuat Histogram di PostgreSQL