Mysql 首次总和为零的两个日期之间总和的增加/减少百分比
我有一个像这样的mysql查询-Mysql 首次总和为零的两个日期之间总和的增加/减少百分比,mysql,Mysql,我有一个像这样的mysql查询- SELECT location, SUM(IF(action_dt_tm BETWEEN '2013-01-01' AND '2013-06-30',1,0)) AS previous, SUM(IF(action_dt_tm BETWEEN '2013-07-01' AND '2013-12-31',1,0)) AS current, SUM(IF(action_dt_tm BETWEEN '2013-07-01' AND '2013-12-31',1,
SELECT location,
SUM(IF(action_dt_tm BETWEEN '2013-01-01' AND '2013-06-30',1,0)) AS previous,
SUM(IF(action_dt_tm BETWEEN '2013-07-01' AND '2013-12-31',1,0)) AS current,
SUM(IF(action_dt_tm BETWEEN '2013-07-01' AND '2013-12-31',1,0))-
SUM(IF(action_dt_tm BETWEEN '2013-01-01' AND '2013-06-30',1,0)) as diff, (
SUM(IF(action_dt_tm BETWEEN '2013-07-01' AND '2013-12-31',1,0))-
SUM(IF(action_dt_tm BETWEEN '2013-01-01' AND '2013-06-30',1,0)))/
SUM(IF(action_dt_tm BETWEEN '2013-01-01' AND '2013-06-30',1,0))*100 AS percent
FROM table group by location order by percent DESC
这是我根据stackoverflow上以前的答案得出的
其思想是返回一个位置、一个上一个日期范围计数、一个当前计数(这些范围改变)、上一个和当前之间的数值差以及百分比的增加或减少
差不多-
LOCATION 1 38 27 -11 -28.94%
LOCATION 2 6 18 12 200.00%
等
上面的代码虽然可能很笨重,但似乎可以工作,除非之前的计数为零,然后百分比返回为NULL,而不是增加/减少
即
任何人都可以建议如何修改查询以解决此问题。如果以前的值等于0,则会导致百分比列被零除 默认情况下,被零除的结果为NULL,没有警告 因为你有一个被零除的除法,我不确定用空值替换任何其他值是否有意义,但是你应该能够在除法之前通过检查前一次计数的零来替换它 示例(将其替换为零):
谢谢但这是否意味着对于前一个值为0的计算,它只会返回0,而不是计算增加?它会。我刚才给了你一个例子,说明你可以用它来替换这个值。你需要检查一下替换的意义。我接受你的观点,它确实给了我一个起点,谢谢。我现在只需要想出一个替代方案
LOCATION 3 0 32 32 (NULL)
SELECT location,
SUM(IF(action_dt_tm BETWEEN '2013-01-01' AND '2013-06-30',1,0)) AS previous,
SUM(IF(action_dt_tm BETWEEN '2013-07-01' AND '2013-12-31',1,0)) AS current,
SUM(IF(action_dt_tm BETWEEN '2013-07-01' AND '2013-12-31',1,0))-
SUM(IF(action_dt_tm BETWEEN '2013-01-01' AND '2013-06-30',1,0)) as diff, (
case
when (SUM(IF(action_dt_tm BETWEEN '2013-01-01' AND '2013-06-30',1,0))) then
0
else
SUM(IF(action_dt_tm BETWEEN '2013-07-01' AND '2013-12-31',1,0))-
SUM(IF(action_dt_tm BETWEEN '2013-01-01' AND '2013-06-30',1,0)))/
SUM(IF(action_dt_tm BETWEEN '2013-01-01' AND '2013-06-30',1,0))*100
end
AS percent
FROM table group by location order by percent DESC