选择前几个月的数据 - MySQL

时间:2014-08-23 16:40:43

标签: php mysql

我想生成这样的图形。

enter image description here

我需要这样的数据来生成如上图。

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

结果是

enter image description here

用户

的表格结构

enter image description here

2 个答案:

答案 0 :(得分:1)

只需使用条件聚合:

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所以结果是合理的图表顺序。

答案 1 :(得分:1)

如果我理解你的问题,你不需要子查询,只需加入表格,按部分名称和月份名称计算部分和分组:

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