String_agg () işlevinden sonuç nasıl sıralanır


101

Bir masam var:

CREATE TABLE tblproducts
(
productid integer,
product character varying(20)
)

Satırlar ile:

INSERT INTO tblproducts(productid, product) VALUES (1, 'CANDID POWDER 50 GM');
INSERT INTO tblproducts(productid, product) VALUES (2, 'SINAREST P SYP 100 ML');
INSERT INTO tblproducts(productid, product) VALUES (3, 'ESOZ D 20 MG CAP');
INSERT INTO tblproducts(productid, product) VALUES (4, 'HHDERM CREAM 10 GM');
INSERT INTO tblproducts(productid, product) VALUES (5, 'CREAM 15 GM');
INSERT INTO tblproducts(productid, product) VALUES (6, 'KZ LOTION 50 ML');
INSERT INTO tblproducts(productid, product) VALUES (7, 'BUDECORT 200 Rotocap');

Ben yürütmek durumunda string_agg()üzerinde tblproducts:

SELECT string_agg(product, ' | ') FROM "tblproducts"

Aşağıdaki sonucu döndürecektir:

CANDID POWDER 50 GM | ESOZ D 20 MG CAP | HHDERM CREAM 10 GM | CREAM 15 GM | KZ LOTION 50 ML | BUDECORT 200 Rotocap

Toplanan dizeyi kullanacağım sıraya göre nasıl sıralayabilirim ORDER BY product?

PostgreSQL 9.2.4 kullanıyorum.

Yanıtlar:


227

Postgres 9.0+ ile şunları yazabilirsiniz:

select string_agg(product,' | ' order by product) from "tblproducts"

Detaylar burada .


pencere işlevlerini kullanırken de işe yarayacak bir çözüm önerebilir misiniz?
— Saurabh Gujarani

Bağlantı için teşekkürler. string_aggBelgelerde arama yapmak sizi oraya götürmez.
— Manngo

32

https://docs.microsoft.com/en-us/sql/t-sql/functions/string-agg-transact-sql?view=sql-server-2017

SELECT
  STRING_AGG(prod, '|') WITHIN GROUP (ORDER BY product)
FROM ... 

4
Soru PostgreSQL hakkındaydı. Bu WITHIN GROUPyan tümce, string_aggMicrosoft SQL'de olduğu gibi işlev için geçerli değildir .
— Manngo

7
Soru string_agg hakkındaydı. Postgres sorusuna tesadüfi oldu ve en son bundan bahsetti. Soru başkaları için de yararlıdır.
— nomen

1
Bu sözdizimi size sözdizimi hataları veriyorsa, uyumluluk düzeyinizi kontrol edin: stackoverflow.com/questions/43611024/…
— Bay TA

4
select string_agg(prod,' | ') FROM 
  (SELECT product as prod FROM tblproducts ORDER BY product )MAIN;

SQL FIDDLE


2
OP ile aynı sorunu yaşadım ve bu yaklaşım benim ilk düşüncemdi, ancak ne yazık ki işe yaramıyor (bu beni buraya getirdi), oysa Igor'unki.
— chbrown

Benim tarafımda, her iki yaklaşım da (Ilesh'ler ve Igor'lar) işe yaradı.
— Stephan

3
Yanlış cevap. İşe yarayabilir, ancak çalışması garanti edilmez.
— zyamys

İlişkisel Veritabanı kısmen matematiksel kümelere dayanır ve bu, SQL'deki temel ilkenin satır sırasının önemli olmadığı gerçeğine yansımıştır. ORDER BYAlt sorguya bir cümle dahil etseniz bile , FROMcümle, verileri sırayla almayabilir. Bu işe yararsa, saf şanstır.
— Manngo
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.