【问题标题】:Filter twice with MAX() in MySQL在 MySQL 中使用 MAX() 过滤两次
【发布时间】:2021-04-28 18:19:49
【问题描述】:

我在MySQL 5.7 数据库中有一个名为my_values 的表:

value1 value2 value3
foo 7 something4
foo 5 something1
foo 12 anything5
bar 3 something7
bar 18 anything5
bar 0 anything8
baz 99 anything9
baz 100 something0

如您所见,value1 中有重复项。我只想SELECT 每个唯一的value1 一次,但在value2 中具有最高值的那一行。

我正在使用这个查询:

SELECT v.* FROM my_values v WHERE v.value2 = (SELECT MAX(v2.value2) FROM my_values v2 WHERE v2.value1 = v.value1);

结果是:

value1 value2 value3
foo 12 anything5
bar 18 anything5
baz 100 something0

Here's a fiddle of that.

从这个结果中,我只想SELECT 每个唯一的value3 一次,但在value2 中具有最高值的那一行(不管value1 是什么)。

所以预期的结果是:

value1 value2 value3
bar 18 anything5
baz 100 something0

我该怎么做?

【问题讨论】:

    标签: mysql sql sql-max


    【解决方案1】:

    你可以这样做:

    select t1.*
    from my_values t1
    natural join (select value1, MAX(value2) value2
                   from my_values 
                   group by value1 ) t2
    natural join (select value3, MAX(value2) value2
                   from my_values 
                   group by value3) t3
    

    fiddle

    【讨论】:

      【解决方案2】:

      您可以使用元组进行比较:

      select t.*
      from my_values t
      where (t.value2, t.value3) = (select t2.value2, t2.value3
                                    from my_values t2
                                    where t2.value1 = t.value1
                                    order by t2.value2 desc, t2.value3 desc
                                    limit 1
                                   );
      

      【讨论】:

      • my_values 在您的查询中丢失。
      • 子查询会返回多条记录,真的有效吗?我认为你需要限制 1
      • @eshirvana 。 . .谢谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-11
      • 2014-09-06
      • 1970-01-01
      • 2018-04-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多