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

रोलअप के बाद क्रमबद्ध करें कुल और उप-योग पंक्तियों की स्थिति को संरक्षित करें

जोहान का जवाब :

SELECT *
FROM (
  SELECT 
    COALESCE(country, 'total') AS country,
    COALESCE(region, 'total' ) AS region,
    SUM(`value`) as `value`, 
  FROM `table` 
  GROUP BY country, region WITH ROLLUP
) t
ORDER BY country = 'total', country, region = 'total', `value`

इस ट्रिक के काम करने का तरीका यह है कि एक्सप्रेशन country = 'total' 1 (सत्य) का मूल्यांकन करता है यदि country कॉलम 'total' . के बराबर है , और 0 (गलत) अन्यथा। आरोही संख्यात्मक क्रम में, 0 के बाद 1 आता है। इस प्रकार, उस व्यंजक द्वारा छँटाई किसी भी पंक्ति को बाध्य करती है जहाँ country कॉलम 'total' . के बराबर है किसी अन्य कॉलम के बाद सॉर्ट करने के लिए।

इसी तरह, व्यंजकों द्वारा क्रमबद्ध करना region = 'total' value . से पहले 'total' . मान वाली किसी भी पंक्ति को बाध्य करता है उनके region . में समान country . के साथ किसी अन्य पंक्ति के बाद सॉर्ट करने के लिए , उनके value . की परवाह किए बिना स्तंभ।

यही ट्रिक दूसरे तुलना ऑपरेटरों के साथ भी काम करती है। बहुत। उदाहरण के लिए, यदि आप नकारात्मक मानों को सकारात्मक मानों के बाद क्रमबद्ध करने के लिए बाध्य करना चाहते हैं, तो आप पंक्तियों को `value` < 0, `value` द्वारा क्रमबद्ध कर सकते हैं ।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. कौन सा सबसे तेज़ है? `टेबल` से SQL_CALC_FOUND_ROWS चुनें, या COUNT(*) चुनें

  2. क्या तैयार कथन से ऑटोइनक्रिकमेंट आईडी पुनर्प्राप्त करने का कोई तरीका है

  3. क्या मुझे क्लाइंट पर एक स्ट्रिंग के रूप में ग्राफ़क्यूएल आईडी को संभालना चाहिए?

  4. मैं php में एक डायनामिक URL कैसे बना सकता हूँ?

  5. क्या प्राथमिक कुंजियों को हमेशा एक innodb तालिका में जोड़ा जाना चाहिए?