Sql fidle here。
SELECT UserId,totalLikes FROM Users
LEFT JOIN(select ownerId, PostId from Posts) a ON ownerId = UserId
LEFT JOIN(select idOfPost, count(idOfPost) AS totalLikes from Likes) b ON idOfPost = PostId
WHERE UserId = 120 GROUP BY UserId
这是我正在使用的查询的简化部分,它在小提琴上完全按照我需要的方式工作,它将每个idOfPost
计为类似于属于指定用户的每个帖子,这种情况where UserId = 120
它将结果分组到一行。
但是当我在WAMP
中运行时,我收到以下错误#1140 this is incompatible with sql_mode=only_full_group_by
我认为是因为我需要按PostId
分组,但如果我这样做,我会得到多行,自然因为帖子的ID不同但我想把它放在一行。
所以我的问题是:我是否应该禁用sql_mode=only_full_group_by
女巫我不确定会产生什么影响,或者我的表结构是否有问题需要更改,可能包括{{1}在UserId
表中,或者我的查询有错并且需要更改?
mysql版本5.7.14
答案 0 :(得分:1)
在子查询中使用GROUP BY
,在主查询中使用sum()
聚合:
SELECT UserId, sum(totalLikes) AS totalLikes
FROM Users
LEFT JOIN Posts a ON ownerId = UserId
LEFT JOIN (
select idOfPost, count(idOfPost) AS totalLikes
from Likes
group by idOfPost) b ON idOfPost = PostId
WHERE UserId = 120
GROUP BY UserId