2016-07-27 42 views
0

因此,例如我有下面的表格;如何按最高值分组

  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

您可以使用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 - 我修改了数据以涵盖上面提到的边界情况。

+1

这个答案藏汉工作,如何最大(ID)的工作,为什么它选择的最大(值)匹配的ID,而不是最高的id号? – inControl

+1

这只适用于数据。检查这个例子,一个小的变化与'行1'具有最大值,将失败http://sqlfiddle.com/#!9/576ec/1 –

+0

@JuanCarlosOropeza呃,我现在只注意到它。你是对的。我会相应地编辑答案。 – Bostjan

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

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