我有一张叫booking_details.的桌子
id | tour_id | tour_fee| booking_id
1 | 1 | 200 | 1
2 | 2 | 350 | 1
3 | 1 | 200 | 2
4 | 2 | 350 | 3tour_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实现这一目标?
发布于 2019-02-18 09:28:23
您正在尝试选择非聚合列,这些列不是GROUP BY子句的一部分。
更改查询,如下所示。
SELECT t.NAME AS NAME,
Sum(bd.tour_fee) total_income,
Count(t.id) number_of_bookings
FROM booking_details bd
INNER JOIN tours t
ON bd.tour_id = t.id
GROUP BY t.NAME; 小建议,作为一种良好的实践,您应该在加入时为表使用别名。
发布于 2019-02-18 09:29:18
除聚合字段外,还需要添加组中的所有其他列。
SELECT
booking_details.tour_id,
Tours.name AS name,
SUM(tourfee) AS total_income,
COUNT(Tours.id)
FROM
booking_details
INNER JOIN
Tours ON booking_details.tour_id = Tours.id
GROUP BY
booking_details.tour_id, Tours.name发布于 2019-02-18 09:29:22
您在查询中使用了聚合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.*意味着预订表的每一列,但是您还没有将这些列分组,所以它引发了错误
https://stackoverflow.com/questions/54744019
复制相似问题