2016-04-26 101 views
0

我有一个mysql表,其中包含'created_at'和'type'等列。我想要做的是获得每周创建的总行数,并进一步将该数字按“类型”细分。MySQL分解组通过结果添加更多详细信息到分组

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

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 

从这个计算器的问题(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)); 

这是一个有点不同的,那么什么,我试图让,但它的东西,我仍然可以正常工作。但是,它不包括每周的总数(希望将所有我想要的数据返回到结果集中)。我会如何去做这件事?

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

回答

0

通过使用组和周

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

在我的情况下使用一周没有工作,因为我的数据可以跨越年,WEEK()只出现在今年返回星期数。这与我所尝试的类似,但没有总结类型数量。 – Hawkeye001

+0

我已更新答案 – scaisEdge