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

प्रति माह गिनती पाने के लिए MySQL क्वेरी

अगर बनाया गया एक INT फ़ील्ड है, तो आपको FROM_UNIXTIME इसे दिनांक फ़ील्ड में बदलने के लिए कार्य करें, और फिर महीना माह निकालने का कार्य:

SELECT Month(FROM_UNIXTIME(created)), Count(*)
FROM yourtable
WHERE FROM_UNIXTIME(created) >= CURDATE() - INTERVAL 1 YEAR
GROUP BY Month(FROM_UNIXTIME(created))

यह उन सभी पंक्तियों की गणना करेगा जो पिछले 12 महीनों में बनाई गई हैं। कृपया ध्यान दें कि संभवत:वर्ष के अनुसार समूह बनाना भी बेहतर है:

SELECT Year(FROM_UNIXTIME(created)), Month(FROM_UNIXTIME(created)), Count(*)
FROM yourtable
WHERE FROM_UNIXTIME(created) >= CURDATE() - INTERVAL 1 YEAR
GROUP BY Year(FROM_UNIXTIME(created)), Month(FROM_UNIXTIME(created))

यदि आपको पंक्तियों के बजाय पंजीकरण संख्या गिनने की आवश्यकता है, तो आप कुछ इस तरह का उपयोग कर सकते हैं

COUNT(registration_number)

शून्य मानों को छोड़ने के लिए, या

COUNT(DISTINCT registration_number)

केवल अलग-अलग लोगों को गिनने के लिए।

संपादित करें

यदि आपको ऐसे महीने भी दिखाने हैं जिनमें गिनती =0 है, तो मैं इस तरह की एक क्वेरी का उपयोग करूंगा जो वर्तमान और पिछले वर्ष के सभी महीनों को लौटाती है:

SELECT y, m
FROM
  (SELECT YEAR(CURDATE()) y UNION ALL SELECT YEAR(CURDATE())-1) years,
  (SELECT 1 m UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4
    UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8
    UNION ALL SELECT 9 UNION ALL SELECT 10 UNION ALL SELECT 11 UNION ALL SELECT 12) months;

और फिर मैं एक लेफ्ट जॉइन का उपयोग करूंगा, जो पहली क्वेरी की सभी पंक्तियों को लौटाता है, और केवल दूसरी क्वेरी की पंक्तियाँ जो मेल खाती हैं:

SELECT y, m, Count(yourtable.created)
FROM (
  SELECT y, m
  FROM
    (SELECT YEAR(CURDATE()) y UNION ALL SELECT YEAR(CURDATE())-1) years,
    (SELECT 1 m UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4
      UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8
      UNION ALL SELECT 9 UNION ALL SELECT 10 UNION ALL SELECT 11 UNION ALL SELECT 12) months) ym
  LEFT JOIN yourtable
  ON ym.y = YEAR(FROM_UNIXTIME(yourtable.created))
     AND ym.m = MONTH(FROM_UNIXTIME(yourtable.created))
WHERE
  (y=YEAR(CURDATE()) AND m<=MONTH(CURDATE()))
  OR
  (y<YEAR(CURDATE()) AND m>MONTH(CURDATE()))
GROUP BY y, m

(कृपया ध्यान दें कि यहां मैं केवल पिछले 12 महीनों पर विचार कर रहा हूं, इसलिए यदि हम अप्रैल 2013 के मध्य में हैं तो यह मई 2012 - 13 अप्रैल के अंतराल में पंक्तियों की गणना करेगा, यदि यह सही व्यवहार नहीं है तो कृपया मुझे बताएं)

  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 को एकीकृत करना

  2. mysql DATETIME कॉलम को युग सेकंड में बदलें

  3. MySQL ODBC 5.1 सेट नाम ड्राइवर द्वारा अनुमत नहीं हैं

  4. स्थानीय कंप्यूटर पर MySQL सेवा शुरू हुई और फिर बंद हो गई

  5. रेल त्रुटि mysql2 (mysql2-0.3.20) स्थापित करने में त्रुटि