我想生成这样的图形。



我需要像这样的数据来生成上述图形。

June - Art 2
June - Commerce 4
June - Maths 4
June - Science 5

May - Art 2
May - Commerce 3
May - Maths 4
May - Science 4


我试过这个查询

SELECT DISTINCT (
MONTHNAME( user_reg )
), u.sec_name, u.count
FROM (

SELECT COUNT( user_section ) AS count, sections.sec_name, users.user_reg
FROM users
LEFT JOIN sections ON users.user_section = sections.sec_id
GROUP BY sections.sec_name
) AS u


结果是



用户表的表结构

最佳答案

只需使用条件聚合:

SELECT MONTHNAME(u.user_reg), s.sec_name, COUNT(*)
FROM users u JOIN
     sections s
     ON u.user_section = s.sec_id
GROUP BY MONTHNAME(u.user_reg), s.sec_name
ORDER BY MIN(u.user_reg), s.sec_name;


一些注意事项:


您似乎不需要left join。如果某项不匹配,则您不希望其计数。
这引入了表别名作为表名的缩写,使查询更易于读写。
它有一个明确的ORDER BY,因此结果在图表中的排列顺序合理。

关于php - 从前几个月选择数据-MySQL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25464124/

10-11 06:13