PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

PostgreSQL में प्रति समूह पहली पंक्ति कैसे प्राप्त करें

कभी-कभी, आपको PostgreSQL में प्रति समूह पहली पंक्ति प्राप्त करने की आवश्यकता हो सकती है। सादे SQL का उपयोग करके यह एक कठिन क्वेरी हो सकती है। सौभाग्य से, PostgreSQL ऐसे डेटा एनालिटिक्स के लिए विंडो फ़ंक्शन प्रदान करता है। यहां बताया गया है कि PostgreSQL में प्रति समूह पहली पंक्ति कैसे प्राप्त करें।

PostgreSQL में प्रति समूह पहली पंक्ति कैसे प्राप्त करें

यहाँ PostgreSQL में प्रति समूह पहली पंक्ति प्राप्त करने के चरण दिए गए हैं।

मान लें कि आपके पास निम्न तालिका है product_sales जिसमें उत्पादवार बिक्री शामिल है।

postgres=# create table product_sales(
             product varchar(255),
             order_date date, 
             sale int);

postgres=# insert into product_sales(product,order_date, sale)
           values('A','2020-05-01',250),
           ('B','2020-05-01',350),
           ('C','2020-05-01',1250),
           ('A','2020-05-02',450),
           ('B','2020-05-02',650),
           ('C','2020-05-02',1050),
           ('A','2020-05-03',150),
           ('B','2020-05-03',250),
           ('C','2020-05-03',1850);

postgres=# select * from product_sales;
 product | order_date | sale
---------+------------+------
 A       | 2020-05-01 |  250
 B       | 2020-05-01 |  350
 C       | 2020-05-01 | 1250
 A       | 2020-05-02 |  450
 B       | 2020-05-02 |  650
 C       | 2020-05-02 | 1050
 A       | 2020-05-03 |  150
 B       | 2020-05-03 |  250
 C       | 2020-05-03 | 1850

मान लीजिए कि आप प्रत्येक समूह में, यानी प्रत्येक उत्पाद के लिए पहली पंक्ति प्राप्त करना चाहते हैं। WINDOW FUNCTION का उपयोग करके आप आसानी से प्रत्येक समूह के लिए पहला रिकॉर्ड प्राप्त कर सकते हैं।

बोनस पढ़ें :PostgreSQL में रो नंबर कैसे प्राप्त करें

PostgreSQL में प्रति समूह पहली पंक्ति कैसे प्राप्त करें

प्रति समूह पहला रिकॉर्ड प्राप्त करने के लिए यहां SQL क्वेरी है। पहले हम प्रति समूह प्रत्येक रिकॉर्ड के लिए पंक्ति संख्या निर्दिष्ट करते हैं।

postgres=# select
            *,
           row_number() over (partition by product order by order_date asc) 
           as row_number
           from product_sales;
 product | order_date | sale | row_number
---------+------------+------+------------
 A       | 2020-05-01 |  250 |          1
 A       | 2020-05-02 |  450 |          2
 A       | 2020-05-03 |  150 |          3
 B       | 2020-05-01 |  350 |          1
 B       | 2020-05-02 |  650 |          2
 B       | 2020-05-03 |  250 |          3
 C       | 2020-05-01 | 1250 |          1
 C       | 2020-05-02 | 1050 |          2
 C       | 2020-05-03 | 1850 |          3

उपरोक्त क्वेरी में, हम row_number() . का उपयोग करते हैं प्रत्येक रिकॉर्ड के लिए पंक्ति संख्या निर्दिष्ट करने के लिए कार्य करता है। चूंकि, हमें प्रत्येक समूह के लिए अलग-अलग पंक्तियों की संख्या की आवश्यकता होती है, इसलिए हम PARTITION WINDOW FUNCTION का उपयोग करते हैं। हम Postgresql को प्रत्येक उत्पाद . द्वारा पंक्तियों को विभाजित करने के लिए कहते हैं , अर्थात्, और प्रत्येक समूह के लिए पंक्तियों को order_date . के अनुसार क्रमबद्ध करें

इसके बाद, हमें उपरोक्त परिणाम का उपयोग उन पंक्तियों का चयन करने के लिए करना होगा जहां row_number=1

postgres=# select *
           from (
            select
                *,
               row_number() over (partition by product order by order_date asc) 
               as row_number
             from product_sales
             ) temp where row_number=1;
 product | order_date | sale | row_number
---------+------------+------+------------
 A       | 2020-05-01 |  250 |          1
 B       | 2020-05-01 |  350 |          1
 C       | 2020-05-01 | 1250 |          1

उपरोक्त क्वेरी आपको प्रत्येक समूह में पहला रिकॉर्ड देगी।

बोनस पढ़ें :PostgreSQL में पर्सेंटाइल की गणना कैसे करें

PostgreSQL में प्रति समूह अंतिम पंक्ति कैसे प्राप्त करें

यदि आप PostgreSQL में प्रति समूह अंतिम पंक्ति प्राप्त करना चाहते हैं, तो बस उपरोक्त क्वेरी के PARTITION खंड में क्रम को आरोही से अवरोही में बदलें।

postgres=# select *
           from (
           select
             *,
             row_number() over (partition by product order by order_date desc) 
             as row_number
             from product_sales
           ) temp where row_number=1;
 product | order_date | sale | row_number
---------+------------+------+------------
 A       | 2020-05-03 |  150 |          1
 B       | 2020-05-03 |  250 |          1
 C       | 2020-05-03 | 1850 |          1

उम्मीद है, आप PostgreSQL में प्रत्येक समूह में पहला रिकॉर्ड प्राप्त कर सकते हैं।

Ubiq मिनटों में डेटा को विज़ुअलाइज़ करना और रीयल-टाइम डैशबोर्ड में मॉनिटर करना आसान बनाता है। इसे आज ही आजमाएं!

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL मल्टी-क्लाउड क्लस्टर परिनियोजन

  2. LIMIT/OFFSET के साथ एक क्वेरी चलाएँ और पंक्तियों की कुल संख्या भी प्राप्त करें

  3. पोस्टग्रेज:वैक्यूम कमांड मृत टुपल्स को साफ नहीं करता है

  4. पोस्टग्रेस्क्ल में विंडोज़ पर .sql फ़ाइल आयात करना

  5. Laravel:त्रुटि [PDOException]:PostgreSQL में ड्राइवर नहीं ढूँढ सका