php - Mysql 依靠 ORDERBY 不能与 Join 一起使用
问题描述
我有两个表“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
解决方案
排名前两位的评论者及其追随者人数。首先对表进行分组,然后进行 LEFT JOIN。
SELECT cr.wallet_address, cr.TotalReview, coalesce(fl.TotalFollowers,0) TotalFollowers
FROM (
SELECT wallet_address, COUNT(Review) as TotalReview
FROM coin_review
WHERE wallet_address!='123'
GROUP BY wallet_address
ORDER BY COUNT(Review) DESC
LIMIT 2
) cr
LEFT JOIN (
SELECT from_wallet_address, COUNT(to_wallet_address) TotalFollowers
FROM un_user_follower
WHERE from_wallet_address!='123'
GROUP BY from_wallet_address
) fl ON cr.wallet_address = fl.from_wallet_address
ORDER BY cr.TotalReview ASC
返回
wallet_address TotalReview TotalFollowers
12345 1 2
1234 2 2
推荐阅读
- javascript - PHP无限滚动不加载更多帖子
- arrays - 我有一个动态内存分配问题
- apache-superset - 为什么超集无法使用 PyAthena 和 rest 方案连接到 Athena 并抛出 HTTP 422“意外错误”?
- java - VSCode 无法识别 Gradle 源依赖
- serverless-framework - 如何使用无服务器框架向 cloudWatchLog 添加过滤器名称?
- python - python正则表达式搜索在路径中找不到下划线
- google-cloud-platform - GKE 中证书管理器的防火墙规则
- csv - Freemarker CSV 生成 - 带有中文文本的 CSV 会截断 csv 内容
- azure - 如何在代码中找到 Azure Function App 的部署环境
- java - 有没有办法在 Quarkus 单元测试中回滚事务?