[英]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.