Php Mysql按两个日期求和,按不同、缺失和新建
Mysql查询两个日期的总和(按不同、缺失和新建) 按名称分组Php Mysql按两个日期求和,按不同、缺失和新建,php,mysql,Php,Mysql,Mysql查询两个日期的总和(按不同、缺失和新建) 按名称分组 10/10/2016 xx 10 10/10/2016 xx 15 10/10/2016 yy 15 10/10/2016 yy 45 10/10/2016 zz 25 10/10/2016 zz 5 10/10/2016 xx 5 10/11/2016 xx 15 10/11/2016 zz 25 10/11/2016 zz 5 10/11/2016 xx 45 10/11/2016
10/10/2016 xx 10
10/10/2016 xx 15
10/10/2016 yy 15
10/10/2016 yy 45
10/10/2016 zz 25
10/10/2016 zz 5
10/10/2016 xx 5
10/11/2016 xx 15
10/11/2016 zz 25
10/11/2016 zz 5
10/11/2016 xx 45
10/11/2016 aa 45
我想要这个结果
name 10/10/2016 10/11/2016 DIFF
+-----+-----+----+-----+-----+-----+
aa NULL 45 45
xx 30 60 30
yy 60 NULL -60
zz 30 30 0
桌子
假设查询中只有两个日期,您应该能够在此处执行常规透视查询。下面有一个技巧。如果给定的
名称
在给定的日期
中没有条目,则希望在预期输出中显示NULL
。但在差分列中,您希望将该条目视为零。我通过添加一个ELSE
条件来实现这一点,该条件在缺少给定名称/日期时使用零
SELECT name,
SUM(CASE WHEN date = '2016-10-10' THEN total END) AS 10_10_2016,
SUM(CASE WHEN date = '2016-10-11' THEN total END) AS 10_11_2016,
SUM(CASE WHEN date = '2016-10-11' THEN total ELSE 0 END) -
SUM(CASE WHEN date = '2016-10-10' THEN total ELSE 0 END) AS DIFF
FROM test
GROUP BY name
如果在显示系统默认格式错误和时始终保持相同的yyyy-mm-dd模式,则(对我而言)更容易理解(如果我在第4行用三个日期修改我所做的更改,我想知道它谢谢Tim Biegeleisenth先生您的问题的答案取决于在三个日期的情况下您想如何计算
DIFF
列。我理解答案,我还添加了数据3,并使用了日期之间的总和
SELECT name,
SUM(CASE WHEN date = '2016-10-10' THEN total END) AS 10_10_2016,
SUM(CASE WHEN date = '2016-10-11' THEN total END) AS 10_11_2016,
SUM(CASE WHEN date = '2016-10-11' THEN total ELSE 0 END) -
SUM(CASE WHEN date = '2016-10-10' THEN total ELSE 0 END) AS DIFF
FROM test
GROUP BY name
SELECT *,IFNULL(data1,0)-IFNULL(data2,0) FROM(
SELECT `date`,`name`,
MAX(IF(`date` = '2016-10-10',tot, NULL)) data1,
MAX(IF(`date` ='2016-10-11',tot, NULL)) data2
FROM (SELECT `date`,`name`,SUM(total) AS tot FROM test GROUP BY `name`,`date`) AS tab
GROUP BY `name`) AS t