我有一张桌子。我需要获取结果并在折线图中显示。我需要计数结果(id)并明智地输入。我尝试了一个查询但没有工作。在图表中,我需要显示两种类型(预订和会员资格)。是否可以在单个查询中获得两种类型并按月计算?
SQL查询
SELECT COUNT(id), type, MONTHNAME(created_at) FROM orders WHERE YEAR(created_at) = 2016 ORDER BY created_at GROUP BY MONTH(created_at)
订单表
id type created_at
1 booking 2016-01-12
2 membership 2016-01-12
3 booking 2016-05-11
4 booking 2016-05-15
5 booking 2016-07-07
6 membership 2016-07-08
7 membership 2016-07-09
8 membership 2016-08-16
9 booking 2016-08-17
10 membership 2016-08-19
期望输出为: 例如:在这种情况下(2016-07-07)我需要数量是3,类型是"预订,会员资格,会员资格"
答案 0 :(得分:1)
我认为你只想要条件聚合:
SELECT MONTHNAME(created_at),
SUM(type = 'Booking') as Booking,
SUM(type = 'Membership') as Membership
FROM orders
WHERE YEAR(created_at) = 2016
GROUP BY MONTH(created_at)
ORDER BY MIN(created_at );
注意:
GROUP BY
列放在聚合查询中,然后将计算后的列放在后面。 (个人喜好)。SUM()
计算真值的数量。在大多数其他数据库中,您需要使用CASE
表达式。ORDER BY
位于GROUP BY
。CREATED_AT
周围放置了一个聚合函数,因为不在GROUP BY
中的列永远不应该是#34;裸#34; 答案 1 :(得分:0)
您好,您应该使用GROUP_CONCAT
。
GROUP_CONCAT()
- function返回一个字符串,其中包含来自组的串联非NULL值。
所以你的查询应该像
SELECT count(id) as total, GROUP_CONCAT(type) as Types, MONTHNAME(created_at) as MONTH from orders group by MONTH(created_at)