繁体   English   中英

在 MySQL 中使用 MAX() 过滤两次

[英]Filter twice with MAX() in MySQL

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

价值1 价值2 价值3
7 某事4
5 某事1
12 任何东西5
酒吧 3 某事7
酒吧 18 任何东西5
酒吧 0 任何东西8
巴兹 99 任何东西9
巴兹 100 某事0

如您所见, 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);

结果是:

价值1 价值2 价值3
12 任何东西5
酒吧 18 任何东西5
巴兹 100 某事0

这是一个小提琴。

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

所以预期的结果是:

价值1 价值2 价值3
酒吧 18 任何东西5
巴兹 100 某事0

我怎样才能做到这一点?

这是你可以做到的:

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

小提琴

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

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
                             );

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM