У меня проблема с объединением sql join с группой и подзапросом для выбора максимального значения.
Таблица 1
user_id user_name
1 x
2 t
3 y
4 i
5 o
Таблица 2
user_id game_id
1 soccer
2 soccer
2 pool
2 basketball
5 swimming
table3
user_id fans date
1 54805 2018-10-05
2 10005 2018-10-05
2 10023 2018-10-03
3 175 2018-10-05
4 1542 2018-10-05
При выполнении этого запроса, который группирует все game_ids по user_ids, у меня есть успех:
SELECT table1.user_id, table1.user_name, group_concat(table2.game_id) as games
FROM (table1
LEFT JOIN table2 on table2.user_id = table1.user_id)
group by table1.user_id
Но при попытке объединить подзапрос, чтобы вернуть последний номер фанатов:
SELECT table1.user_id, table1.user_name, group_concat(table2.game_id) as games, table3.fans
FROM ((table1
LEFT JOIN table2 on table2.user_id = table1.user_id)
INNER JOIN (SELECT * FROM table3 WHERE MAX(update_time) ORDER BY update_time LIMIT 1) AS fans ON table1.user_id = table3.user_id)
group by table1.user_id
У меня проблема с групповой функцией:
#1111 - Invalid use of group function
Редактировать:
Исправлена проблема №1111, изменив WHERE на HAVING, но мой запрос по-прежнему не работает, поскольку MYSQL сообщает следующее:
Unknown column 'table3.fans' in 'field list'






Если вы используете функцию агрегирования, вы должны объявить в предложении group by все столбцы, не участвующие в функции агрегирования.
Вы используете функцию агрегирования MAX(update_time) в предложении where, и это вызывает ошибку invalid use of group function.
использование агрегированной функции в where не разрешено, в конечном итоге вы можете отфильтровать этот результат с помощью предложения Have.
SELECT table1.user_id
, table1.user_name
, group_concat(table2.game_id) as games
, fans.my_res
FROM table1
INNER JOIN (
SELECT user_id, MAX(update_time) my_res FROM table3
group by user_id
ORDER BY my_res DESC LIMIT 1
) AS fans ON table1.user_id = fans.user_id
LEFT JOIN table2 on table2.user_id = table1.user_id
group by table1.user_id, table1.user_name, fans.my_res
в вашем случае вы также имеете в виду table3, который находится в подзапросе и не виден снаружи .. поэтому вы должны ссылаться на эти столбцы, используя псевдоним который вы использовали для таблицы результатов подзапроса (вентиляторы)
не могли бы вы объяснить, что вы указали в "my_res" в "ORDER BY update_time my_res", поскольку он возвращает синтаксическую ошибку
ответ обновлен .. удалено неиспользуемое update_time (с использованием псевдонима my_res)
теперь возвращает неизвестный столбец table3.fans в заявлении группы :)
Спасибо за подробный ответ. однако отправленный вами запрос также возвращает ошибку: # 1055 - Выражение № 2 списка SELECT отсутствует в предложении GROUP BY и содержит неагрегированный столбец 'db.table3.fans', который функционально не зависит от столбцов в предложении GROUP BY; это несовместимо с sql_mode = only_full_group_by. Кроме того, я обновил свои псевдонимы в запросе.