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

प्रत्येक N मानों को समूहीकृत करना

पहला तरीका जो दिमाग में आता है वह है row_number() . का उपयोग करना तालिका को एनोटेट करने के लिए, फिर 16 पंक्तियों के ब्लॉक के आधार पर समूहित करें।

SELECT min(id) as first_id, max(id) AS last_id, avg(rainfall) AS avg_this_16
FROM (
  SELECT id, rainfall, row_number() OVER (order by id) AS n
  FROM the_table
) x(id,rainfall,n)
GROUP BY n/16
ORDER BY n/16;

ध्यान दें कि इसमें अंतिम समूह के लिए आवश्यक रूप से 16 नमूने शामिल नहीं होंगे।

वैकल्पिक रूप से आप चल रहे औसत . की गणना कर सकते हैं avg() . का उपयोग करके विंडो फ़ंक्शन के रूप में:

SELECT id, avg(rainfall) OVER (ORDER BY id ROWS 15 PRECEDING)
FROM the_table;

... संभवत:यह टिप्पणी करते हुए कि पंक्ति संख्या के साथ और जो आप चाहते हैं उसका चयन करें:

SELECT id AS greatest_id_in_group, avg_last_16_inclusive FROM (
  SELECT
    id, 
    avg(rainfall) OVER (ORDER BY id ROWS 15 PRECEDING) AS avg_last_16_inclusive,
    row_number() OVER (ORDER BY id) AS n
  FROM the_table
) x WHERE n % 16 = 0;

यह अंतिम n<16 नमूनों की अवहेलना करेगा, उनके लिए एक पंक्ति नहीं लौटाएगा।

ध्यान दें कि मैं मान रहा हूं कि आईडी को सन्निहित होने की गारंटी नहीं है। यदि वे अंतर-रहित हैं, तो आप केवल group by id/16 . कर सकते हैं और विंडो फ़ंक्शन से बचें।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. कॉलम मान वाली पंक्तियों को शून्य के रूप में कैसे चुनें?

  2. एक किताब की दुकान आवेदन के लिए सिफारिश प्रणाली

  3. PostgreSQL UUID प्रकार का प्रदर्शन

  4. postgreSQL त्रुटि initdb:आदेश नहीं मिला

  5. प्लेसहोल्डर के रूप में प्रश्न चिह्न की व्याख्या करने से पीडीओ को कैसे रोकें?