Mysql按周末日期分组

时间:2019-03-02 04:31:33

标签: mysql

我有下一个数据库:

database

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

我正试图做这样的事情

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`;

因此,如果我在X城的日期为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     |

2 个答案:

答案 0 :(得分:0)

我添加了

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`;

fiddle with the desired result

答案 1 :(得分:-1)

如果我理解正确,那么您只希望在周末的不同星期进行旅行计数。

我认为以下是解决方案。如果我错了请纠正我。

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