如何从子查询中仅获取单个users.name字段值
解决方法
你可以通过两种方式调整SQL,实现仅输出users.name字段:
方式一:优化子查询结构(推荐,性能更优)
将子查询简化为仅统计支付次数并排名,外层通过uid关联users表获取用户名,避免子查询中不必要的字段关联:
SELECT users.name FROM users JOIN ( SELECT pay.uid, RANK() OVER(ORDER BY COUNT(pay.uid) DESC) AS ranking FROM pay GROUP BY pay.uid ) AS ranked_pay ON users.uid = ranked_pay.uid WHERE ranked_pay.ranking = 1
方式二:精简原查询的字段
直接去掉子查询中不需要的pay.uid字段,同时确保GROUP BY子句兼容数据库要求(部分数据库需包含users.name):
SELECT name FROM ( SELECT users.name, RANK() OVER(ORDER BY COUNT(pay.uid) DESC) AS ranking FROM pay, users WHERE users.uid = pay.uid GROUP BY users.uid, users.name ) AS ranked_users WHERE ranking = 1
说明
- 第一种方式减少了子查询的关联操作,执行效率更高;
- 第二种方式贴近你原有的查询结构,修改幅度小,但需注意
GROUP BY的兼容性(若users.uid是主键,部分数据库可省略users.name)。
内容的提问来源于stack exchange,提问作者JamesTuT
相关产品推荐
相关产品推荐

