PostgreSQL অ্যারে_অ্যাগ অর্ডার


111

সারণী 'প্রাণী':

animal_name animal_type
Tom         Cat
Jerry       Mouse
Kermit      Frog

প্রশ্ন:

SELECT 
array_to_string(array_agg(animal_name),';') animal_names,
array_to_string(array_agg(animal_type),';') animal_types
FROM animals;

প্রত্যাশিত ফলাফল:

Tom;Jerry;Kerimt, Cat;Mouse;Frog
OR
Tom;Kerimt;Jerry, Cat;Frog;Mouse

আমি কী নিশ্চিত যে প্রথম সমষ্টিগত ক্রমে অর্ডারটি সর্বদা দ্বিতীয় হিসাবে একই থাকে। মানে আমি পেতে চাই না:

Tom;Jerry;Kermit, Frog;Mouse,Cat

7
আপনি 9.0 এ থাকলে আপনি নেস্টেড কলগুলি এককstring_agg()
a_horse_with_no_name

উত্তর:


28

আপনি যদি পোস্টগ্রিজ এসকিউএল সংস্করণ <9.0 এ থাকেন তবে:

থেকে: http://www.postgresql.org/docs/8.4/static/function-aggregate.html

বর্তমান বাস্তবায়নে ইনপুটটির ক্রমটি নীতিগতভাবে অনির্ধারিত। একটি সাজানো সাবকোয়ারি থেকে ইনপুট মান সরবরাহ করা সাধারণত কাজ করবে। উদাহরণ স্বরূপ:

ট্যাব হিসাবে xmlagg (x) FROM (Y DESC দ্বারা পরীক্ষার আদেশ থেকে নির্বাচন করুন) নির্বাচন করুন;

সুতরাং আপনার ক্ষেত্রে আপনি লিখতে হবে:

SELECT
array_to_string(array_agg(animal_name),';') animal_names,
array_to_string(array_agg(animal_type),';') animal_types
FROM (SELECT animal_name, animal_type FROM animals) AS x;

অ্যারে_অ্যাগে ইনপুটটি তখন আনর্ডার্ড করা হবে তবে উভয় কলামে এটি একই হবে। এবং আপনি যদি চান তবে আপনি ORDER BYসাবকোয়ারিতে একটি ধারা যোগ করতে পারেন ।


347

ম্যানুয়াল থেকে এই উদাহরণটির মতো একটি অর্ডার ব্যবহার করুন :

SELECT array_agg(a ORDER BY b DESC) FROM table;

44
দ্রষ্টব্য: ORDER BYইন array_aggপোস্টগ্রিজ এসকিউএল 9
উলফআর

6
পোস্টগ্র্রেএসকিউএল 9+ ধরে ধরে নেওয়া গৃহীত উত্তরের চেয়ে অনেক বেশি ভাল।
এরিক

4
আপনি দয়া করে বাছাইয়ের জন্য অর্ডার দিয়ে নমুনা দিতে পারেন: নির্বাচিত অ্যারে_্যাগ (পশুর নাম), অ্যারে_অ্যাগ (পশুর_প্রকার) থেকে প্রাণী; ?
গ্রেগরি কিসলিন

11
মনে রাখবেন যে এটি array_agg(DISTINCT a ORDER BY b)
19-30-

4
একাধিক কলামের জন্য ব্যবহার করার সময় আপনাকে প্রথম বন্ধনী যুক্ত করতে হবে:array_agg((a, b, c) ORDER BY b)
বেনোস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.