String_agg () से परिणाम कैसे सॉर्ट करें


99

मेरे पास एक टेबल है:

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

पंक्तियों के साथ:

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');

अगर मैं इस string_agg()पर अमल करता हूं tblproducts:

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

यह निम्नलिखित परिणाम लौटाएगा:

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

मैं एकत्रित स्ट्रिंग को कैसे क्रमबद्ध कर सकता हूं, जिस क्रम में मैं उपयोग करूंगा ORDER BY product?

मैं PostgreSQL 9.2.4 का उपयोग कर रहा हूं।

जवाबों:


225

9.0+ पोस्टग्रैस के साथ आप लिख सकते हैं:

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

यहाँ विवरण


क्या आप कृपया एक समाधान सुझा सकते हैं जो विंडो फ़ंक्शन का उपयोग करते समय भी काम करेगा?
सौरभ गुजराती '’१aur को ०ab

लिंक के लिए धन्यवाद। string_aggप्रलेखन में खोज आपको वहाँ नहीं ले जाती है।
मंजींगो

33

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 ... 

3
सवाल PostgreSQL के बारे में था। WITHIN GROUPखंड पर लागू नहीं होता string_aggसमारोह, के रूप में यह Microsoft SQL के साथ करता है।
मानगो

6
सवाल string_agg के बारे में था। पोस्टग्रेज उनके प्रश्न के लिए आकस्मिक था और उन्होंने इसका उल्लेख किया। सवाल दूसरों के लिए भी उपयोगी है।
नौ

1
यदि यह सिंटैक्स आपको सिंटैक्स त्रुटि देता है, तो अपनी संगतता स्तर जांचें: stackoverflow.com/questions/43611024/…
श्री टीए

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

SQL FIDDLE


2
मुझे ओपी के रूप में एक ही समस्या थी, और यह दृष्टिकोण मेरा पहला विचार था, लेकिन दुर्भाग्य से यह काम नहीं करता है (जो मुझे यहां लाया गया), जबकि इगोर ने ऐसा किया।
चब्रो

मेरी तरफ, दोनों दृष्टिकोण (इलेश के और इगोर के) ने काम किया।
स्टीफन

3
गलत जवाब। यह काम कर सकता है लेकिन काम करने की गारंटी नहीं है।
zyamys

रिलेशनल डेटाबेस गणितीय सेटों पर आधारित है, और यह इस तथ्य में परिलक्षित होता है कि SQL में एक बुनियादी सिद्धांत यह है कि पंक्ति क्रम महत्वपूर्ण नहीं है। यहां तक ​​कि अगर आप ORDER BYउप क्वेरी में एक खंड शामिल करने के लिए थे , तो FROMखंड आवश्यक रूप से डेटा को क्रम में नहीं लाता है। यदि यह काम करता है, तो यह शुद्ध भाग्य है।
मन्नेंजो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.