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

विशिष्ट स्तंभों के साथ सभी पंक्तियों की गणना करना और सप्ताह के अनुसार समूह बनाना

आपकी क्वेरी गैर नियतात्मक है इसलिए यह आश्चर्यजनक नहीं है कि आपको अप्रत्याशित परिणाम मिल रहे हैं। इससे मेरा मतलब है कि आप इस क्वेरी को एक ही डेटा पर 5 बार चला सकते हैं और 5 अलग-अलग परिणाम सेट प्राप्त कर सकते हैं। यह इस तथ्य के कारण है कि आप DATE(timestamp) . का चयन कर रहे हैं लेकिन WEEK(DATE(startdate)) . के अनुसार समूहीकृत करना , इसलिए क्वेरी किसी भी में प्रति प्रारंभ दिनांक सप्ताह में आने वाली पहली पंक्ति का समय लौटा रही है आदेश।

निम्नलिखित 2 पंक्तियों पर विचार करें (पढ़ने में आसानी के लिए दिनांक प्रारूप में टाइमस्टैम्प के साथ):

TimeStamp       StartDate
20120601        20120601
20120701        20120601

आपकी क्वेरी WEEK(StartDate) . के अनुसार समूहीकृत की जा रही है जो कि 23 है, क्योंकि दोनों पंक्तियों का मूल्यांकन एक ही मान पर होता है, आप उम्मीद करेंगे कि आपके परिणामों में 2 की गिनती के साथ 1 पंक्ति होगी।

हालांकि DATE(Timestamp) चयन सूची में भी है और चूंकि कोई ORDER BY नहीं है कथन क्वेरी को पता नहीं है कि कौन सा टाइमस्टैम्प '20120601' या '20120701' लौटाएगा। तो इस छोटे से परिणाम सेट पर भी आपके पास प्राप्त करने का 50:50 मौका है:

TimeStamp       COUNT
20120601        2

और प्राप्त करने का 50:50 मौका

TimeStamp       COUNT
20120701        2

यदि आप डेटासेट में इस प्रकार अधिक डेटा जोड़ते हैं:

TimeStamp       StartDate
20120601        20120601
20120701        20120601
20120701        20120701

आप प्राप्त कर सकते हैं

TimeStamp       COUNT
20120601        2
20120701        1

या

TimeStamp       COUNT
20120701        2
20120701        1

आप देख सकते हैं कि कैसे 37,000,000 पंक्तियों के साथ आपको जल्द ही ऐसे परिणाम मिलेंगे जिनकी आपको उम्मीद नहीं है और जिनका आप अनुमान नहीं लगा सकते हैं!

संपादित करें

चूंकि ऐसा लगता है कि आप अपने परिणामों में सप्ताह की शुरुआत प्राप्त करने का प्रयास कर रहे हैं, जबकि सप्ताह के आधार पर समूह आप सप्ताह की शुरुआत करने के लिए निम्नलिखित का उपयोग कर सकते हैं (CURRENT_TIMESTAMP को आप जो भी कॉलम चाहते हैं उसे बदलकर):

SELECT  DATE_ADD(CURRENT_TIMESTAMP, INTERVAL 1 - DAYOFWEEK(CURRENT_TIMESTAMP) DAY) AS WeekStart

फिर आप साप्ताहिक परिणाम प्राप्त करने के लिए इस तिथि तक समूह बना सकते हैं और अपनी चयन सूची में ऐसी चीजें रखने की परेशानी से बच सकते हैं जो आपके समूह में नहीं हैं।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Php ग्रिड को पॉप्युलेट करने के लिए 400 सेलेक्ट क्वेश्चन

  2. MySQL - कॉनकैट और group_concat का उपयोग करके पंक्ति मान को कॉलम नाम के रूप में कैसे प्रदर्शित करें?

  3. जेपीए या हाइबरनेट एक (गैर प्राथमिक कुंजी) कॉलम मान उत्पन्न करने के लिए, 1 . से शुरू नहीं

  4. अजगर में MySQL लोड डेटा स्थानीय INFILE उदाहरण?

  5. इष्टतम दृष्टिकोण की तलाश में, डीबीएमएस में डायनामिक फॉर्म डेटा संग्रहीत करना