如何按最高值分组

时间:2016-07-27 20:58:13

标签: mysql group-by

所以,例如,我有下表;

          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分组。

2 个答案:

答案 0 :(得分:1)

DEMO

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;

<强>输出

enter image description here

注意:但要小心关系。在这种情况下,你可以从这些关系中随机获得一个。

答案 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 - 我已修改数据以涵盖上述边缘情况。