【发布时间】:2021-10-14 08:09:51
【问题描述】:
我有两个表“coin_review”和“un_user_follower”,我想获取“Top Reviewer”(除了我(123),并且他的大多数评论存在,他的追随者) 这是我的表“coin_review”
id Review wallet_address
1 Lorem Ipsum1 123
2 Lorem Ipsum2 1234
3 Lorem Ipsum3 1234
4 Lorem Ipsum4 12345
...
这是我的表“un_user_follower”
id from_wallet_address to_wallet_address
1 1234 11111
2 1234 12254
3 123 25141
4 12345 14144
5 12345 14798
...
现在我想获得顶级评论者(存在最多记录)和他的追随者总数 例如,我想要以下输出作为结果
id wallet_address TotalReview TotalFollowers
1 1234 2 2
2 12345 1 1
为此,我尝试了以下查询
SELECT cr.id,COUNT(cr.Review) as Total,COUNT(usf.to_wallet_address)
FROM coin_review cr
JOIN un_user_follower usf
ON usf.to_wallet_address=cr.wallet_address
WHERE cr.wallet_address!='123'
GROUP BY cr.Review
ORDER BY Total ASC
但是我遇到了错误,我该如何解决这个问题?我哪里错了?
SELECT list is not in GROUP BY clause and contains nonaggregated column 'Uni_back.cr.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
【问题讨论】:
-
如果
cr.Review是唯一的(根据唯一索引),则使用GROUP BY cr.id, cr.Review。如果没有,请使用SELECT MIN(cr.id) AS id, ...。 我哪里错了? 想象cr.Review不是唯一的,具有相同值的两行具有不同的cr.id值。对于这个Review,这两个值中的什么值必须在单行中返回?服务器不知道,因此会产生错误。 -
@Akina:你能写出准确的查询,这样我就可以在我身边检查和实施
-
主要为两个表提供 CREATE TABLE 脚本(编辑您的问题文本)。还要说明
TotalFollowers的输出值是从哪里获得的... 非NULLto_wallet_address values的数量? -
全连接(使用一个技巧,因为Mysql不支持全连接)对原始表进行分组和过滤。
-
@Serg:那么解决方案是什么?我怎样才能获得大多数审稿人?