所以,例如,我有下表;
ID COUNTRY VALUE
--------------------- -------------------- --------------------
1 India 12000
2 India 11000
3 UK 11000
4 India 15000
5 Canada 11000
我想按国家/地区进行分组,但只显示具有最高价值的国家/地区,如果我只是按查询使用组:
SELECT * FROM countries GROUP BY country
我会得到;
ID COUNTRY VALUE
--------------------- -------------------- --------------------
1 India 12000
3 UK 11000
5 Canada 11000
如果印度的价值是12000.我希望查询按国家/地区分组最高值:
ID COUNTRY VALUE
--------------------- -------------------- --------------------
3 UK 11000
4 India 15000
5 Canada 11000
所以它按最高值15000分组。
答案 0 :(得分:1)
SELECT s1.ID, s1.COUNTRY, s1.VALUE
FROM countries s1
LEFT JOIN countries s2
ON s1.VALUE < s2.VALUE
AND s1.COUNTRY = s2.COUNTRY
WHERE s2.COUNTRY IS NULL;
<强>输出强>
注意:但要小心关系。在这种情况下,你可以从这些关系中随机获得一个。
答案 1 :(得分:0)
您可以使用MAX聚合函数。
select
country,
max(value) value
from countries
group by
country
请参阅live example。
编辑:由于数据的性质,原始解决方案只是正确的。我已从第一个查询中删除了ID,以纠正错误。这是另一个解决方案(基于@Juan Carlos Oropeza的工作 - 谢谢),它将返回ID并消除关系。
select
min(x.id) id,
x.country,
x.value
from (
select
c.*
from countries c
left join countries c1 on c.value < c1.value and c.country = c1.country
where c1.country is null
) x
group by
x.country,
x.value
;
请参阅live example - 我已修改数据以涵盖上述边缘情况。