我有一个 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));
这与我想要得到的有点不同,但我仍然可以使用它。但是,它不包括每周的总数(更希望在结果集中返回我想要的所有数据)。我该如何去做呢?
由于我不知道“type”中的值,因此我不想直接在查询中指定这些值,特别是因为这些值可能会随着时间的推移而更改。
最佳答案
使用分组和周
select week(created_at), type, count(*)
from my_table
where year(created_at) = year(curdate())
group by week(created_at), type
关于MySQL 分解 Group By 结果以向分组添加更多详细信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36874843/