Php 选择sum并按种类分组
我试图用MySql数据库中的数据填充Morris图表的数据数组 我有这样的“布琼根”桌子:Php 选择sum并按种类分组,php,mysql,json,morris.js,Php,Mysql,Json,Morris.js,我试图用MySql数据库中的数据填充Morris图表的数据数组 我有这样的“布琼根”桌子: ID Value Kind Date 1 200 L 2016-01-01 2 250 B 2016-01-01 3 250 L 2016-01-01 4 200 B 2016-02-01 5 250 B 2016-02-01 6 200 L 2016
ID Value Kind Date
1 200 L 2016-01-01
2 250 B 2016-01-01
3 250 L 2016-01-01
4 200 B 2016-02-01
5 250 B 2016-02-01
6 200 L 2016-02-01
我想做一个查询,让我得到如下输出:
ID Value Kind Date
1 200 L 2016-01-01
2 250 B 2016-01-01
3 250 L 2016-01-01
4 200 B 2016-02-01
5 250 B 2016-02-01
6 200 L 2016-02-01
值的总和,按数据和种类分组
一月份:450、L和250 B
二月份:450 B和200 L
所需结构:
[{"m":"1","a":"450","b":"250},{"m":"2","a":"200","b":"450}]
我的问题是:
SELECT MONTH( date ) AS m, SUM( value ) AS a
FROM `buchungen`
WHERE YEAR( date ) = YEAR( CURDATE( ) )
GROUP BY MONTH( date )
我得到以下结构:
[{"m":"4","a":"476852.64"},{"m":"5","a":"851866.74"}]
我有一个问题,我不知道如何考虑“善良”的领域。我该怎么做
谢谢 试试这个:
SELECT MONTH( date ) AS m,
SUM(CASE WHEN Kind = 'L' THEN value ELSE 0 END) AS a,
SUM(CASE WHEN Kind = 'B' THEN value ELSE 0 END) AS b
FROM `buchungen`
WHERE YEAR( date ) = YEAR( CURDATE( ) )
GROUP BY MONTH( date )
试试这个:
SELECT MONTH( date ) AS m,
SUM(CASE WHEN Kind = 'L' THEN value ELSE 0 END) AS a,
SUM(CASE WHEN Kind = 'B' THEN value ELSE 0 END) AS b
FROM `buchungen`
WHERE YEAR( date ) = YEAR( CURDATE( ) )
GROUP BY MONTH( date )
正如您提到的,您需要按日期和种类分组的值总和,请尝试以下方法:
SELECT MONTH( date ) AS m, kind, SUM( value ) AS a FROM `buchungen` WHERE YEAR( date ) = YEAR( CURDATE( ) ) GROUP BY MONTH( date ), kind;
正如您提到的,您需要按日期和种类分组的值总和,请尝试以下方法:
SELECT MONTH( date ) AS m, kind, SUM( value ) AS a FROM `buchungen` WHERE YEAR( date ) = YEAR( CURDATE( ) ) GROUP BY MONTH( date ), kind;
虽然有点多嘴,但我想
在CONCAT(YEAR(CURDATE()),'-01-01')和CONCAT(YEAR(CURDATE()),'-12-31')之间的日期应该更快这工作正常。谢谢是否还有一种方法可以输出“空”月份的值?比如说,如果“布琼根”一月份什么都没有,只输出第01个月,a 0,b 0?@FlorianSauerwein你必须使用日历表。我有一个所有月份的表。我可能需要在那张桌子上做一个外部连接。我可以扩展上面的查询吗,或者我必须做一个完整的新查询吗?@FlorianSauerwein你可以做类似于的事情。从日历c左键在c.month=b.month(date)…上加入buchungen b
虽然有点多,但我猜在CONCAT(YEAR(CURDATE(),'-01-01')和CONCAT(YEAR(CURDATE(),'-12-31')之间的日期)
会更快这工作正常。谢谢是否还有一种方法可以输出“空”月份的值?比如说,如果“布琼根”一月份什么都没有,只输出第01个月,a 0,b 0?@FlorianSauerwein你必须使用日历表。我有一个所有月份的表。我可能需要在那张桌子上做一个外部连接。我可以扩展上面的查询吗,或者我必须创建一个完整的新查询吗?@FlorianSauerwein您可以执行类似于的操作。从日历c左键在c.month=b.month(date)加入buchungen b)