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

क्या दिए गए उपसमूह के लिए सभी समूहों के पास समान कुल शक्ति है?

प्रश्न को ध्यान से पढ़ें

और:

प्रदर्शन के लिए महत्वपूर्ण बिंदु अप्रासंगिक पंक्तियों को जल्दी बाहर करना है और दिए गए उपसमूह के लिए केवल समुच्चय की गणना करें . फिर (कुछ विशिष्ट उपसमूहों से अधिक मानते हुए), (subgroup) . पर एक अनुक्रमणिका मदद कर सकता है:

CREATE INDEX ON foo (subgroup);

निम्न में से प्रत्येक क्वेरी FALSE लौटाती है यदि दिए गए उपसमूह के लिए कम से कम दो समूहों के पास अलग-अलग कुल योग हैं, और TRUE सभी . में अन्य मामले (क्वेरी 5 के लिए एक मामूली अपवाद के साथ, नीचे देखें)।

क्वेरी 1

SELECT count(DISTINCT total_power) = 1
FROM  (
   SELECT sum(power) AS total_power
   FROM   foo
   WHERE  subgroup = 'Sub_B'  -- exclude irrelevant rows early!
   GROUP  BY grp
   ) sub;

क्वेरी 2

SELECT count(*) = 1
FROM  (
   SELECT true
   FROM  (
      SELECT sum(power) AS total_power
      FROM   foo
      WHERE  subgroup = 'Sub_C'
      GROUP  BY grp
      ) sub2
   GROUP  BY total_power
   ) sub2;

क्वेरी 3

SELECT count(*) OVER () = 1
FROM  (
   SELECT sum(power) AS total_power
   FROM   foo
   WHERE  subgroup = 'Sub_A'
   GROUP  BY grp
   ) sub
GROUP  BY total_power
LIMIT  1;

क्वेरी 4

(
SELECT FALSE
FROM  (
   SELECT sum(power) AS total_power
   FROM   foo
   WHERE  subgroup = 'Sub_A'
   GROUP  BY grp
   ) sub
GROUP  BY total_power
OFFSET 1
LIMIT  1
)
UNION ALL
SELECT TRUE
LIMIT 1;

यह खास है। स्पष्टीकरण के साथ संबंधित उत्तर:

क्वेरी 5

SELECT min(total_power) = max(total_power)  -- can fail for NULL values
FROM  (
   SELECT sum(power) AS total_power
   FROM   foo
   WHERE  subgroup = 'Sub_A'
   GROUP  BY grp
   ) sub;

अंतिम विफल हो सकता है यदि NULL सत्ता में मूल्यों की अनुमति है। (लेकिन आपको इस मामले में वैसे भी अपेक्षित परिणामों को परिभाषित करना होगा।)

मैंने एक व्यापक परीक्षण चलाया और आदर्श परिस्थितियों में समान प्रदर्शन करने के लिए सभी प्रश्नों को पाया:

db<>fiddle यहां

प्रश्न 5 बाकी की तुलना में थोड़ा तेज था।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. CentOS 7 पर पोस्टग्रेस्क्ल सेवा शुरू करने में असमर्थ

  2. पोस्टग्रेएसक्यूएल को डॉकटर कंटेनर पर तैनात करना

  3. Amazon Redshift में पूर्णांक रूपांतरण के लिए हेक्स स्ट्रिंग

  4. अनुरोधित सेवा बनाने में असमर्थ [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]

  5. प्ले कनवर्ट करना! MySQL से PostgreSQL तक ढांचा विकास