You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL:如何一次性查询表中各列最大值及对应用户名

一次性获取各列最大值及对应用户名的SQL方案

嘿,当然有办法用一条SQL一次性返回你要的结果!不用先查最大值再关联,咱们可以用UNION ALL把每个列的查询逻辑合并起来,直接输出结构化的结果,比你预期的还清晰。

适用的SQL语句

假设你的表名为user_scores(记得换成你实际的表名),可以这么写:

SELECT 
    'Vale' AS column_name,
    username,
    Vale AS max_value
FROM user_scores
WHERE Vale = (SELECT MAX(Vale) FROM user_scores WHERE Vale IS NOT NULL)
UNION ALL
SELECT 
    'Jorge' AS column_name,
    username,
    Jorge AS max_value
FROM user_scores
WHERE Jorge = (SELECT MAX(Jorge) FROM user_scores WHERE Jorge IS NOT NULL)
UNION ALL
SELECT 
    'Andrea' AS column_name,
    username,
    Andrea AS max_value
FROM user_scores
WHERE Andrea IS NOT NULL 
  AND Andrea = (SELECT MAX(Andrea) FROM user_scores WHERE Andrea IS NOT NULL);

逻辑解释

  • 每个SELECT块单独处理一个数值列:先通过子查询找到该列忽略NULL后的最大值,再匹配出拥有这个最大值的用户名。
  • UNION ALL把三个列的结果合并成一个结果集,这样你就能一次性拿到所有列的信息。
  • 特意加上column_name字段,能清楚区分每条结果对应哪个列,比你说的“John Jorge 6”这种无结构的输出更实用。

针对你的测试数据的输出结果

用你给的测试数据跑这条SQL,会得到:

column_nameusernamemax_value
ValeJohn2
JorgeJohn6
AndreaMarcy1

完美对应你要的“John Vale 2;John Jorge 6;Marcy Andrea 1”的需求~

另外,如果某列有多个用户同时拥有最大值(比如假设两个用户的Jorge值都是6),这条SQL会把所有对应的用户名都返回,这也是合理的业务逻辑。

内容的提问来源于stack exchange,提问作者noisy andrew

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:38:28