MySQL Gruop, когда нет агрегации - PullRequest
0 голосов
/ 18 февраля 2019

У меня есть таблица с именем 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 относится к таблице Tours и 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?

Ответы [ 3 ]

0 голосов
/ 18 февраля 2019

Вам необходимо добавить все остальные столбцы в группе, кроме агрегированных полей

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
0 голосов
/ 18 февраля 2019

вы использовали агрегацию 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.*, что означает каждый столбец таблицы бронирования, но вы не поместили этот столбец в группу, поэтомувыданная ошибка

0 голосов
/ 18 февраля 2019

Вы пытаетесь выбрать неагрегированные столбцы, которые не являются частью вашего предложения 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; 

Небольшое предложение, как хорошая практикавы должны использовать псевдонимы для таблиц при объединении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...