首页 > 解决方案 > Mysql按周末日期分组

问题描述

我有下一个数据库:

数据库

我想得到的是城市的名称,以及按周末分组的旅行次数

我试图做这样的事情

select `cities`.`name`, 
SUM( CASE DAYOFWEEK(DATE(date)) WHEN 7 OR 1 THEN 1 ELSE 0 END)AS TOURS
from `cities` 
left join `tours` on `cities`.`id` = `tours`.`city_id`
group by `cities`.`name`;

因此,如果我在城市 XI 的日期为 2019/03/02(星期六)、2019/03/03(星期日)有旅行,将返回 X 和 1 次旅行,因为它按周末对日期进行分组。如果它的日期为 2019/03/09、2019/03/10,我将返回 X 城市的名称和 2 次旅行,因为它的日期为 2 和 3 为 1;和 9 和 10 作为另一个旅游。

我所做的查询只计算周六和周日,而不区分不同的星期。

任何想法?

更新


我添加了一个小提琴 Fiddle

期望的结果是

| name        | TOURS |
| ----------- | ----- |
| Amatitlan   | 0     |
| Guatemala   | 3     |
| Villa Nueva | 1     |

标签: mysql

解决方案


我添加了

count(distinct week(`tours`.`date`, 1))AS TOURS

并完成查询

select `cities`.`name`, 
count(distinct week(`tours`.`date`, 1))AS TOURS
from `cities` 
left join `tours` on `cities`.`id` = `tours`.`city_id`
group by `cities`.`name`;

摆弄想要的结果


推荐阅读