Php 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

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  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