我有下一个数据库:
我想要得到的是城市的名称,以及按周末分组的游览次数
我正试图做这样的事情
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 |
答案 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`;
答案 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);