将单个行中的不同计数值分组

时间:2018-03-24 23:54:39

标签: mysql sql

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表中,或者我的查询有错并且需要更改?

在WAMP上

mysql版本5.7.14

1 个答案:

答案 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

SqlFiddle.