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

PostgreSQL - सांख्यिकीय डेटा प्राप्त करना

आपको एग्रीगेट फ़ंक्शन पर गौर करना चाहिए (न्यूनतम, अधिकतम, गणना, औसत), जो GROUP BY . दिनांक-आधारित एकत्रीकरण के लिए, date_trunc उपयोगी भी है।

उदाहरण के लिए, यह प्रति दिन पंक्तियों की संख्या लौटाएगा:

SELECT date_trunc('day', date_time) AS day_start,
       COUNT(id) AS user_count FROM tb_user
    GROUP BY date_trunc('day', date_time);

फिर आप कुछ इस तरह का उपयोग करके दैनिक औसत कर सकते हैं (एक सीटीई के साथ ):

WITH daily_count AS (SELECT date_trunc('day', date_time) AS day_start,
       COUNT(id) AS user_count FROM tb_user
    GROUP BY date_trunc('day', date_time))
SELECT AVG(user_count) FROM daily_count;

'week' का प्रयोग करें साप्ताहिक गणना के लिए दिन के बजाय, इत्यादि (देखें date_trunc दस्तावेज़ीकरण)।

संपादित करें: (निम्नलिखित टिप्पणी:5/1/2012 तक औसत और इसमें शामिल हैं, यानी 6 तारीख से पहले।)

WITH daily_count AS (SELECT date_trunc('day', date_time) AS day_start,
       COUNT(id) AS user_count
    FROM tb_user
       WHERE date_time >= DATE('2012-01-01') AND date_time < DATE('2012-01-06') 
    GROUP BY date_trunc('day', date_time))
SELECT SUM(user_count)/(DATE('2012-01-06') - DATE('2012-01-01')) FROM daily_count;

इस मामले में जो ऊपर है वह अति-जटिल है। यह आपको वही परिणाम देगा:

SELECT COUNT(id)/(DATE('2012-01-06') - DATE('2012-01-01'))
    FROM tb_user
       WHERE date_time >= DATE('2012-01-01') AND date_time < DATE('2012-01-06');

संपादित करें 2: आपके संपादन के बाद, मुझे लगता है कि आप जो चाहते हैं वह आपके डेटाबेस के अस्तित्व की पूरी अवधि के लिए केवल एक वैश्विक औसत है, न कि महीने/सप्ताह/दिन के समूहों के आधार पर।

इससे आपको प्रतिदिन पंक्तियों की औसत संख्या मिलनी चाहिए:

WITH total_min_max AS (SELECT
        COUNT(id) AS total_visits,
        MIN(date_time) AS first_date_time,
        MAX(date_time) AS last_date_time,
    FROM tb_user)
SELECT total_visits/((last_date_time::date-first_date_time::date)+1) AS users_per_day
    FROM total_min_max

(मैं last_date_time को बदल दूंगा NOW() के साथ यदि हाल ही में कोई विज़िट नहीं हुई है, तो अंतिम विज़िट तक के बजाय अब तक के समय के साथ औसत बनाने के लिए।)

फिर, दैनिक, साप्ताहिक और "मासिक" के लिए:

WITH daily_avg AS (
    WITH total_min_max AS (SELECT
            COUNT(id) AS total_visits,
            MIN(date_time) AS first_date_time,
            MAX(date_time) AS last_date_time,
        FROM tb_user)
    SELECT total_visits/((last_date_time::date-first_date_time::date)+1) AS users_per_day
        FROM total_min_max)
SELECT
         users_per_day,
         (users_per_day * 7) AS users_per_week,
         (users_per_month * 30) AS users_per_month
    FROM daily_avg

ऐसा कहा जा रहा है, ऐसे आँकड़ों से आप जो निष्कर्ष निकालते हैं वह बहुत अच्छा नहीं हो सकता है, खासकर यदि आप यह देखना चाहते हैं कि यह कैसे बदलता है।

मैं एक महीने में 30 दिन मानने के बजाय प्रति दिन डेटा को भी सामान्य कर दूंगा (यदि प्रति घंटा नहीं, क्योंकि सभी दिनों में 24 घंटे नहीं होते हैं ) मान लें कि आपके पास जनवरी 2011 में प्रति दिन 10 विज़िट और फरवरी 2011 में प्रति दिन 10 विज़िट हैं। इससे आपको जनवरी में 310 विज़िट और फरवरी में 280 विज़िट मिलती हैं। यदि आप ध्यान नहीं देते हैं, तो आप सोच सकते हैं कि आपने लगभग एक आगंतुकों की संख्या में 10% की गिरावट, इसलिए फरवरी में कुछ गलत हुआ, जबकि वास्तव में ऐसा नहीं है।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. pglogic प्रतिकृति तालिका पर ट्रिगर से सूचित करें

  2. PostgreSQL में संग्रहीत कार्यविधि से डेटाबेस छोड़ें या बनाएं

  3. तीन तालिकाओं में शामिल हों जिनमें से एक में प्राथमिक कुंजी न हो

  4. PostgreSQL के लिए pt-pg-सारांश Percona टूलकिट का उपयोग करना

  5. सिंगल टेबल के लिए एंटिटी जेनरेशन