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;