MySQL分解Group By结果以向分组添加更多细节

时间:2016-04-26 20:12:36

标签: mysql

我有一个mysql表,其中包含' created_at'和'键入'等等。我想要做的是获取每周创建的总行数,并进一步将该数字分解为' type'。

也就是说,如果我的数据如下:

created_at   |  type
10/15/2015      car
10/15/2015      bike
10/16/2015      car
10/24/2015      car
10/24/2015      car
10/25/2015      car
10/26/2015      bike

我希望我的查询返回类似的内容:

Week of    | Total  |  car  |  bike
10/15/2015     3      2       1
10/22/2015     4      3       1

从这个stackoverflow问题(How to group by week in MySQL?),我可以按周分组,但是我很难通过'键入'来进一步分解结果。我得到的最接近的是:

SELECT
  FROM_DAYS(TO_DAYS(created_at) -MOD(TO_DAYS(created_at) -1, 7)) AS week_of,
  type,
  COUNT(*) AS 'rows'
FROM mytable
GROUP BY FROM_DAYS(TO_DAYS(created_at) -MOD(TO_DAYS(created_at) -1, 7)), type
ORDER BY FROM_DAYS(TO_DAYS(created_at) -MOD(TO_DAYS(created_at) -1, 7));

这与我想要获得的有点不同,但它仍然可以使用。但是,它并不包括每周的总数(我希望在结果集中返回我想要的所有数据)。我该怎么做呢?

由于我不知道'类型'中的值,我不想直接在查询中指定这些值,特别是因为这些可以随时间更改。

1 个答案:

答案 0 :(得分:0)

逐周使用分组

select week(created_at), type, count(*) 
from my_table 
where year(created_at) = year(curdate())
group by week(created_at), type