Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 首次总和为零的两个日期之间总和的增加/减少百分比_Mysql - Fatal编程技术网

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,

我有一个像这样的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,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