我在将sql join与group&subquery结合以选择最大值时遇到问题。
表1
user_id user_name
1 x
2 t
3 y
4 i
5 o
table2
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
运行此查询时(按用户ID对所有game_id进行分组),我成功了:
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-无效使用组功能
编辑:
通过将WHERE更改为HAVING修复了问题#1111,但是我的查询仍然不如MYSQL报告以下内容>
“字段列表”中的未知列“ table3.fans”
答案 0 :(得分:1)
如果使用聚合函数,则必须在group by子句中声明聚合函数中未涉及的所有列。
您在where子句中使用聚合函数for button in buttons:
toggle(button)
,这会引发错误MAX(update_time)
。
在不允许的地方使用聚合函数,最终您可以使用Haves子句..
invalid use of group function
在这种情况下,您还要引用子查询中不可见的table3 ..因此,您应使用别名引用此列 您用于子查询的表格结果(粉丝)的