/ / mysql sql: गिनती कैसे करें? (गणना का योग) - mysql, sql

mysql sql: गिनती को कम करने के लिए कैसे? (गिनती की राशि) - mysql, sql

मेरा लक्ष्य तारीख तक पंजीकृत उपयोगकर्ताओं की संख्या को कम करना है

यहाँ मेरा mysql sql है

SELECT MONTH( DATE ) AS `month`, COUNT(userid)
FROM  `stats`
WHERE  `userid` = 1
GROUP BY `month`

यह मुझे प्रति माह उपयोगकर्ताओं की संख्या देता है, लेकिन उन्हें कम नहीं करता है

परिणाम:

month 1 : 90
month 2 : 50 (it should be 90 + 50)
month 3 : 10 (it should be 90 + 50 + 10)

मैंने कोशिश की:

SELECT month,
SUM( CNT ) AS CUM_CNT_TILL_NOW
FROM  (
SELECT MONTH( DATE ) AS `month`, COUNT(userid) AS CNT
FROM  `stats`
WHERE  `userid` = 1
GROUP BY `month`
);

और त्रुटि मिली: # 1248 - प्रत्येक व्युत्पन्न तालिका का अपना उपनाम होना चाहिए

उत्तर:

जवाब के लिए 2 № 1

MySQL में, संचयी योग करने के लिए मूल रूप से तीन तरीके हैं:

  • एक सहसंबद्ध उपशम।
  • असमानता एकत्रीकरण के साथ जुड़ती है।
  • चर।

उत्तरार्द्ध सबसे सरल है। हालांकि, इस तरह से group by MySQL में काम करता है, अक्सर आपको एक सबक्वेरी की आवश्यकता होती है:

SELECT yyyy, mm, cnt,
(@sum := @sum + cnt) as cume_sum
FROM (SELECT YEAR(DATE) as yyyy, MONTH( DATE ) AS mm, COUNT(userid) AS CNT
FROM stats
WHERE userid = 1
GROUP BY yyyy, mm
) ym CROSS JOIN
(SELECT @sum := 0) params
ORDER BY yyyy, mm;

टिप्पणियाँ:

  • यह समझदारी से वर्ष को ध्यान में रखता है। यह आमतौर पर तब होता है जब आप महीने के हिसाब से जमा होते हैं।
  • The @sum चर क्वेरी में परिभाषित किया गया है । यह एक सुविधा है ।
  • उप-क्वेरी की आवश्यकता है क्योंकि कई बार चर एग्रीगेटर के साथ अपेक्षा के अनुरूप काम नहीं करते ।
  • उप-क्वेरी एक उपनाम है ।

जवाब के लिए 0 № 2

Mysql में, आप सत्र चर का उपयोग कर सकते हैं । नीचे की तरह:

SET @sum = 0;
SELECT MONTH( DATE ) AS `month`, @sum:=@sum+COUNT(userid) as sum
FROM  `stats`
WHERE  `userid` = 1
GROUP BY `month`;

या फिर, आप दो तालिकाओं में शामिल होने के लिए होगा, लेकिन वह अक्षम हो जाएगा ।


जवाब के लिए 0 № 3
SELECT month,
SUM( CNT ) OVER ( ORDER BY month ROWS BETWEEN UNBOUNDED PRECEEDING
AND CURRENT ROW
) AS CUM_CNT_TILL_NOW
FROM
(
SELECT MONTH( DATE ) AS `month`, COUNT(userid) AS CNT
FROM  `stats`
WHERE  `userid` = 1
GROUP BY `month`
);

एक अंय समाधान:-

WITH tmp AS
(
SELECT MONTH( DATE ) AS `month`, COUNT(userid) AS CNT
FROM  `stats`
WHERE  `userid` = 1
GROUP BY `month`
)
SELECT o.month, o.cnt , RunningTotal = o.cnt + COALESCE(
(
SELECT SUM(cnt) AS cnt
FROM tmp i
WHERE i.month < o.month), 0
)
FROM tmp AS o
ORDER BY o.month;

जवाब के लिए 0 № 4

कुछ इस तरह के साथ की कोशिश करो:

SELECT MONTH(DATE) AS `month`, COUNT(userid) , (SELECT COUNT(userid)
FROM  `stats`
WHERE  `userid` = 1 AND MONTH(date) <= MONTH(s.date))
FROM  `stats` s
WHERE  `userid` = 1
GROUP BY `month`

सुधार के लिए धंयवाद jpw