Mysql查询以比较不同列中的记录并找到最大的数字
您好,我想获得以下场景的正确查询:Mysql查询以比较不同列中的记录并找到最大的数字,mysql,Mysql,您好,我想获得以下场景的正确查询: user_id english physics geography chemistry 1 75 60 85 79 我想要一个mysql查询,它将比较结果并返回主题名/列,他得到了最高的编号。 所以在这里我们看到用户一在地理上得到了最高的分数。我想通过mysql查询获得这个列名(地理位置) 这是fiddle链接:您可以尝试使用MySQL函数获取值,并且: 工作原理 从指定的
user_id english physics geography chemistry
1 75 60 85 79
我想要一个mysql查询,它将比较结果并返回主题名/列,他得到了最高的编号。
所以在这里我们看到用户一在地理上得到了最高的分数。我想通过mysql查询获得这个列名(地理位置)
这是fiddle链接:您可以尝试使用MySQL函数获取值,并且: 工作原理 从指定的列中获取最大值。它返回
85
FIELD(
GREATEST(english, physics, geography, chemistry),
english, physics, geography, chemistry
)
将GREATEAST()
(85
)返回的值与作为下一个参数传递给FIELD()
的值进行比较,并返回第一个值的位置,该值等于最大值()
返回的值。它返回3
ELT(
FIELD(
GREATEST(english, physics, geography, chemistry),
english, physics, geography, chemistry
),
'english', 'physics', 'geography', 'chemistry'
) AS class
ELT()
使用FIELD()
(3
)返回的索引从其下一个参数列表中选择该索引处的值。它返回geography
评论
虽然此查询提供了预期的结果,但您只需选择*
并在客户端代码中查找最大值及其包含的列(假设您没有编写MySQL存储过程)
根据应用程序的结构和需求,还考虑有一个包含<代码> USER ID 、<代码> CalthyId < /C>和<代码>点< /代码>的表;它为每个用户存储几行,每行包含用户在单个类上获得的点数。
你的桌子结构是什么?如果我的目标正确的话,你可以在这里发布预期结果@Alex。这是表结构:@草莓那是什么?这是关于RDBMS的一个最基本的概念,比如MySQL,这是一个很好的详细答案。让我查一下,然后回来。谢谢
FIELD(
GREATEST(english, physics, geography, chemistry),
english, physics, geography, chemistry
)
ELT(
FIELD(
GREATEST(english, physics, geography, chemistry),
english, physics, geography, chemistry
),
'english', 'physics', 'geography', 'chemistry'
) AS class
SELECT *,
@m:=GREATEST(`english`, `physics`, `geography`, `chemistry`),
IF(@m=`english`,'english',
IF(@m=`physics`,'physics',
IF(@m=`geography`,'geography',
'chemistry'
)
)
)
FROM results;