我有一张叫booking_details的表。
id | tour_id | tour_fee| booking_id
1 | 1 | 200 | 1
2 | 2 | 350 | 1
3 | 1 | 200 | 2
4 | 2 | 350 | 3
tour_id是指“游览”表,booking_id是指“预定”表。
我想得到这样的报告
tour_id 1指纽约之旅
tour_id 2指的是巴黎之旅
我需要生成这样的报告
tour name | total_income | number_of_bookings
New york tour| 400 | 2
Paris tour | 700 | 2
这里基本上是旅行名称,该旅行的总收入以及该旅行的预订数量。
我到目前为止所做的就是这个。但这给了我一个语法错误。看来我无法按结果分组。
SELECT booking_details.*,Tours.name as name, count(Tours.id) FROM booking_details
inner join Tours on
booking_details.tour_id = Tours.id group by Tours.name;
如何使用MySQL实现此目的?
最佳答案
您在查询中使用了聚合count()
,并且根据您的要求,它表明您需要聚合。当使用聚合时,还必须将选择列放在分组依据中
SELECT Tours.name as name,sum(tour_fee) income, count(Tours.id)
FROM booking_details
inner join Tours on
booking_details.tour_id = Tours.id group by Tours.name
正如您在选择
booking_details.*
中使用的那样,这意味着预订表的每一列,但您没有将这些列分组,因此抛出了错误