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

उपश्रेणियों सहित संबंधित पंक्तियों की गणना कैसे करें?

यह एक एकल . के लिए काम करता है नेस्टिंग का स्तर:

केवल मूल श्रेणियों को सूचीबद्ध करने के लिए, गणना में उपश्रेणियाँ शामिल हैं:

WITH root AS (
   SELECT id AS cat_id, id AS sub_id
   FROM   category
   WHERE  is_base_template = false
   AND    "userId" = 1
   )
SELECT c.cat_id, count(*)::int AS entries_in_cat
FROM  (
   TABLE root
   UNION ALL
   SELECT r.cat_id, c.id
   FROM   root     r
   JOIN   category c ON c."parentCategoryId" = r.cat_id
   ) c
JOIN   category_entries_entry e ON e."categoryId" = c.sub_id
GROUP  BY c.cat_id;

बात यह है कि sub_id . पर शामिल हों , लेकिन समूह द्वारा cat_id

उपरोक्त और उपश्रेणियों की तरह मूल श्रेणियों को सूचीबद्ध करने के लिए इसके अतिरिक्त :

WITH root AS (
   SELECT id AS cat_id, id AS sub_id
   FROM   category
   WHERE  is_base_template = false
   AND    "userId" = 1
   )
, ct AS (
   SELECT c.cat_id, c.sub_id, count(*)::int AS ct
   FROM  (
      TABLE root
      UNION ALL
      SELECT r.cat_id, c.id AS sub_id
      FROM   root     r
      JOIN   category c ON c."parentCategoryId" = r.cat_id
      ) c
   JOIN   category_entries_entry e ON e."categoryId" = c.sub_id
   GROUP  BY c.cat_id, c.sub_id
   )
SELECT cat_id, sum(ct)::int AS entries_in_cat
FROM   ct
GROUP  BY 1

UNION ALL
SELECT sub_id, ct
FROM   ct
WHERE  cat_id <> sub_id;

db<>fiddle यहां

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

वैकल्पिक शॉर्ट सिंटैक्स के बारे में TABLE parent :



  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 SERIAL का उपयोग करने के लिए SQLAlchemy सेट करें

  2. docker-compose.yml से docker कंटेनर में संकुल स्थापित करें

  3. PostgreSQL - भौतिकीकृत दृश्य स्तंभ मेटाडेटा प्राप्त करें

  4. अपार्टमेंट रत्न के साथ विदेशी प्रमुख मुद्दे

  5. अजीब गोलाई मुद्दा