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

सबक्वेरी के बिना PostgreSQL में कुल का प्रतिशत

मुझे लगता है कि जिस कारण से आप सबक्वायरी को खत्म करना चाहते हैं वह उपयोगकर्ता तालिका को दो बार स्कैन करने से बचना है। याद रखें कि कुल प्रत्येक देश की गणनाओं का योग है।

WITH c AS (
  SELECT
    country_id,
    count(*) AS cnt
  FROM users
  WHERE cond1=...
  GROUP BY country_id
) 
SELECT
  *,
  100.0 * cnt / (SELECT sum(cnt) FROM c) AS percent
FROM c;

यह क्वेरी प्रति-देश आँकड़ों के साथ एक छोटा CTE बनाती है। यह केवल एक बार उपयोगकर्ता तालिका को स्कैन करेगा, और एक छोटा परिणाम सेट (प्रति देश केवल एक पंक्ति) उत्पन्न करेगा।

इस छोटे से परिणाम सेट पर कुल (चुनें योग(cnt) से c) की गणना केवल एक बार की जाती है, इसलिए यह नगण्य समय का उपयोग करता है।

आप विंडो फ़ंक्शन का भी उपयोग कर सकते हैं:

SELECT
  country_id,
  cnt,
  100.0 * cnt / (sum(cnt) OVER ()) AS percent 
FROM (
  SELECT country_id, count(*) as cnt from users group by country_id
) foo;

(जो कि नाइटवॉल्फ की क्वेरी के समान है जिसमें त्रुटियों को हटा दिया गया है)

दोनों प्रश्नों में लगभग एक ही समय लगता है।



  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. कॉपी कमांड से पंक्तियों की गिनती प्राप्त करें

  4. क्या जेडीबीसी के साथ पोस्टग्रेज से कनेक्ट करते समय स्कीमा निर्दिष्ट करना संभव है?

  5. Django के साथ PostgreSQL स्कीमा / नेमस्पेस