ВНУТРЕННЕЕ СОЕДИНЕНИЕ SQL-запроса - неожиданные результаты
У меня есть таблицы:
Поездки: trip_num, trip_type, trip_geographic и т.Д.
Travelers_trips_history: Имя пользователя, номер поездки, тип поездки, сезон поездки и т.Д.
В таблице 2 указаны поездки, которые совершил пользователь, и мне нужно знать, что является наиболее распространенным Trip_Geographic в истории его поездки (Trip_Geographic должен быть известен по таблице 1 - поездки по его trip_num).
Я делаю проект на PHP, и мне нужно выполнить SQL-запрос для определенного пользователь (по его имени пользователя) - необходимо получить таблицу, столбцы которой следующие: 1. trip_geographic, количество случаев, когда trip_geographic находится в истории travelers_trips_history.
Прикрепил таблицы, которые у меня есть:
поездки
Путешественник_трипс_история
Запрос, который я сделал:
$query = "select traveler_trips_history.*, COUNT(trips.Trip_Geographic) AS Trip_Geographic_occurrence
FROM traveler_trips_history INNER JOIN trips ON
travelers_trips_history.Trip_Num = trips.Trip_Num
GROUP BY Trip_Geographic
ORDER BY Trip_Geographic_occurrence DESC
WHERE traveler_trips_history.Traveler_Username = $username";
Я получаю сообщение об ошибке Group BY (проверьте синтаксис), однако я не уверен, что запрос будет делать то, что он должен делать.
4 answers
В вашем запросе есть 2 проблемы:
1- У вас должно быть предложение where перед предложением GroupBy
2- Если вы группируете по Col1, вы можете выбрать только Col1 или использовать агрегатные функции для других столбцов (СУММА, СРЕДНЕЕ значение и т. Д...)
Вам нужно проверить правила для GroupBy и понять их лучше.
Редактировать после вашего комментария:
$query = "select Trip_Geographic, COUNT(*) AS Trip_Geographic_occurrence
FROM traveler_trips_history INNER JOIN trips ON
travelers_trips_history.Trip_Num = trips.Trip_Num
WHERE traveler_trips_history.Traveler_Username = $username
GROUP BY Trip_Geographic
ORDER BY Trip_Geographic_occurrence DESC";
Попробуйте это
SELECT traveler_trips_history.*
,COUNT(trips.Trip_Geographic) AS Trip_Geographic_occurrence
FROM traveler_trips_history
INNER JOIN trips ON travelers_trips_history.Trip_Num = trips.Trip_Num
WHERE traveler_trips_history.Traveler_Username = $USERNAME
GROUP BY traveler_trips_history.travelers_trips_history
,traveler_trips_history.Username
,traveler_trips_history.Trip_Num
,traveler_trips_history.Trip_Type
,traveler_trips_history.Trip_Season
ORDER BY Trip_Geographic_occurrence DESC
Попробуйте вот так
Проблема заключается в вашем предложении where и группировании по столбцам.
SELECT tr.Trip_Geographic
,COUNT(hs.*) AS Trip_Geographic_occurrence
FROM traveler_trips_history hs
INNER JOIN trips tr ON hs.Trip_Num = tr.Trip_Num
WHERE hs.Username = $USERNAME
GROUP BY tr.Trip_Geographic
ORDER BY Trip_Geographic_occurrence DESC
Ваша проблема заключается в том, что предложение WHERE после ГРУППИРУЕТСЯ по и использует столбцы, которые не входят в СГРУППИРОВАННЫЕ ПО или АГРЕГАТНЫЕ функции. Попробуйте выполнить следующее, в котором указано имя пользователя, trip_geographic и нет поездок.
select traveler_trips_history.Traveler_Username, traveler_trips_history.Trip_Geographic, COUNT(trips.Trip_Geographic) AS Trip_Geographic_occurrence
FROM traveler_trips_history INNER JOIN trips ON
travelers_trips_history.Trip_Num = trips.Trip_Num
GROUP BY Trip_Geographic, traveler_trips_history.Traveler_Username
having traveler_trips_history.Traveler_Username = $username
ORDER BY Trip_Geographic_occurrence DESC