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

SQL क्वेरी का उपयोग करके विशेष श्रेणी और आगे द्विभाजित उप श्रेणी की गणना प्राप्त करें

रोलअप के साथ समर्थन के आधार पर MySQL समूह जो आपके लिए व्यापक एकत्रीकरण प्रदान करेगा:

मान लीजिए आपकी कर्मचारी तालिका इस प्रकार है:

Name, Role, Gender
John, Manager, Male
Susie, Manager, Female
...

इस तरह की एक क्वेरी:

SELECT Gender, Role, COUNT(*)
FROM employee
GROUP BY Gender, Role

एक परिचित का उत्पादन करेंगे:

Male, Manager, 5
Male, Senior Manager, 2
Male, Employee, 20

आदि

अब, अगर हम रोलअप के साथ जोड़ते हैं:

SELECT Gender, Role, COUNT(*)
FROM employee
GROUP BY Gender, Role WITH ROLLUP

फिर MySQL भी जेंडर पर रोल एंड जस्ट ग्रुप को नजरअंदाज कर देगा:

Male, Manager, 5
Male, Senior Manager, 2
Male, Employee, 20
Male, NULL, 29

NULL भूमिका पंक्ति वह पंक्ति है जहाँ सभी भूमिकाओं को एक साथ जोड़ा जाता है और गिनती कुल पुरुषों की होती है। रोलअप दाएं से बाएं रोल करता है, इसलिए यदि आप GROUP BY a,b,c,d WITH ROLLUP में थे आपको "ऑल ए, बी, सी", "ऑल ए, बी" और "ऑल ए" के लिए अतिरिक्त पंक्तियाँ मिलेंगी - इसलिए आपके द्वारा अपने ग्रुप में जेंडर और रोल डालने का क्रम महत्वपूर्ण है!

अंत में, यदि आप थोड़ा सा डेटा रीशेपिंग करना चाहते हैं तो आपके पास टेक्स्ट का केवल एक कॉलम है, जैसे आपका उदाहरण:

SELECT COALESCE(Role, Gender) as Desc, Ctr
(
  SELECT Gender, Role, COUNT(*) as Ctr
  FROM employee
  GROUP BY Gender, Role WITH ROLLUP
) x --need to use a subquery - see manual
ORDER BY Gender, Role

लेकिन ध्यान दें कि यदि आप ऐसा करते हैं, तो आप एक समस्या का सामना करेंगे क्योंकि महिला "प्रबंधक" पंक्ति के अलावा पुरुष "प्रबंधक" पंक्ति को ठोस रूप से बताने के लिए कुछ भी नहीं बचा है; यह पूरी तरह से आदेश पर निर्भर है, और यह एक अच्छा विचार नहीं है; इसलिए हम आम तौर पर इस तरह से सबटोटलिंग को फ्रंट एंड पर छोड़ देते हैं, इसलिए रिपोर्ट पैकेज डेटा को एक साथ रखेगा। यदि आप इसे JSON में कनवर्ट करने जैसा कुछ करते हैं, तो इसे किसी दूरस्थ कंप्यूटर पर भेजें और ऑर्डरिंग खो जाए, जानकारी अर्थहीन हो जाती है। व्यक्तिगत रूप से मैं कुछ और करूंगा:

SELECT Gender, COALESCE(Role, '(TOTAL)') as Role, COUNT(*)
FROM employee
GROUP BY Gender, Role WITH ROLLUP

यह पुरुष-प्रबंधक, और महिला-प्रबंधक डेटा को पंक्ति में रखता है ताकि आप उन्हें अलग बता सकें, लेकिन यह NULL को (Total) में बदल देता है यह क्या है इसके बारे में बेहतर जानकारी प्रदान करने के लिए

चर्चा करने के लिए अन्य चीजें हैं जैसे कि क्या होगा यदि कॉलम में स्वयं नल मान हों, लेकिन मैं आपको इसके लिए द फाइन मैनुअल की ओर संकेत करूंगा:https://dev.mysql.com/doc/refman/5.7/hi/group-by-modifiers.html



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL/MariaDB में संग्रहीत प्रक्रियाओं के लिए NULL पैरामीटर को अस्वीकार करें

  2. कमांड लाइन PHP mysql_connect () त्रुटि

  3. पीएचपी पीडीओ::lastInsertId() रिटर्न 0

  4. यदि किसी अन्य फ़ील्ड में मान सेट है तो MYSQL फ़ील्ड डेटा छुपाएं

  5. पीडीओ तैयार बयानों के लिए सटीक स्ट्रिंग मैच को बाध्य करें