【发布时间】:2016-02-27 14:46:51
【问题描述】:
我正在尝试使用月份来计算总和。这是我正在做的部分工作的简化版本:
SELECT
MONTHNAME(STR_TO_DATE(DateContacted,'%m/%d/%Y')) AS MONTH,
IFNULL(COUNT(CASE WHEN s.surveyid = 649814 THEN s.id ELSE NULL END),0) Signer,
(SELECT COUNT(s2.id) FROM sq s2
WHERE s2.surveyid = 649814 AND MONTHNAME(STR_TO_DATE(s2.DateContacted,'%m/%d/%Y')) <= MONTH
GROUP BY MONTH
ORDER BY MONTH) RT
FROM
sq s
GROUP BY MONTH
ORDER BY MONTH
但问题是订单已关闭,当您尝试计算运行总计时,这显然是一件大事:
MONTH Signer RT
April 1646 1646
August 81 1727
December 0 1727
February 0 1727
January 0 1727
July 24 1751
June 241 1992
March 2120 4112
May 115 4227
November 28 4255
October 173 4428
September 73 4501
但是当我尝试像这样正确订购时:
SELECT
MONTHNAME(STR_TO_DATE(DateContacted,'%m/%d/%Y')) AS MONTH,
IFNULL(COUNT(CASE WHEN s.surveyid = 649814 THEN s.id ELSE NULL END),0) Signer,
(SELECT COUNT(s2.id) FROM sq s2
WHERE s2.surveyid = 649814 AND MONTHNAME(STR_TO_DATE(s2.DateContacted,'%m/%d/%Y')) <= MONTH
GROUP BY MONTH
ORDER BY FIELD(MONTH,'January','February','March','April','May','June','July','August','September','October','November','December')) RT
FROM
sq s
GROUP BY MONTH
ORDER BY FIELD(MONTH,'January','February','March','April','May','June','July','August','September','October','November','December')
它会排除所有 RT 计数(尽管 Signer 计数是正确的):
MONTH Signer RT
January 0 1727
February 0 1727
March 2120 4112
April 1646 1646
May 115 4227
June 241 1992
July 24 1751
August 81 1727
September 73 4501
October 173 4428
November 28 4255
December 0 1727
我使用此方法而不是子查询,因为这通常是更大查询的一部分,我 LEFT JOIN 按月将两个表放在一起。不幸的是,我似乎也不能使用@runtot variable solution,因为这需要在最后按月分组,这会导致它失败。我知道 MySQL 对于这种功能并不完美,但我似乎很接近,如果这可以与我的其他查询一起在同一个地方,那就太好了。任何帮助表示赞赏!
编辑:
这是理想的茶几:
MONTH Signer RT
January 0 0
February 0 0
March 2120 2120
April 1646 3766
May 115 3881
June 241 4122
July 24 4146
August 81 4227
September 73 4300
October 173 4473
November 28 4501
December 0 4501
【问题讨论】:
-
对不起,我在您的第二个查询中没有看到错误,所有值都与第一个匹配
-
@JuanCarlosOropeza 由于 'Signer' 列是正确的,第二个查询中的运行总计 (RT) 列应该是 0 表示 1 月,0 表示 2 月,2120 表示 3 月,3766 表示 4 月,3881 表示五月等
-
如果您愿意,请考虑遵循以下简单的两步操作: 1. 如果您还没有这样做,请提供适当的 CREATE 和 INSERT 语句(和/或 sqlfiddle),以便我们可以更容易复制问题。 2. 如果您尚未这样做,请提供与步骤 1 中提供的信息相对应的所需结果集。
-
@JuanCarlosOropeza 第一个查询也是错误的——尽管从技术上讲,如果月份按字母顺序排列,它应该做的事情。但由于它们不是,我可以让它们正确订购的唯一方法是使用
ORDER BY FIELD- 这通常适用于这些东西,但会抛出运行总数。 -
@Ryan,是的,我知道你现在在做什么。
标签: mysql group-by cumulative-sum