我有一张叫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.*中使用的那样,这意味着预订表的每一列,但您没有将这些列分组,因此抛出了错误

10-07 12:32