MySQL 分解 Group By 结果以向分组添加更多详细信息

标签 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));

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

由于我不知道“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/

相关文章:

mysql - 如何进行插入或删除?

mysql - 每个用户行当月每天的统计数据

mysql - 有没有办法从运行 mysql 的 shell 脚本禁用 my.cnf 垂直设置?

php - 用户 ID 的 SQL 更新

mysql - 通过 MySQL 工作台向用户发送电子邮件

php - 从数据库中选择多个表

mysql - 包含相关产品数量的类别列表

按字符串搜索 PHP MySQL 表 - 使用散列?

MySQL Group By每种类型的前N个数

mysql - 为什么在 MySQL 中 'select *' 和 'select id' 之间的 id 不同?