总和前三个总数和组结果

时间:2014-09-19 17:29:49

标签: php mysql

这是我的问题......

表格如下:

|id    |coutry    |sum
|  0   |  USA     |  30     
|  1   |  USA     |  60     
|  2   |  USA     |  90     
|  3   |  USA     |  80     
|  4   |  GER     |  40     
|  5   |  GER     |  90     
|  6   |  SWE     |  30     
|  7   |  SWE     |  10     
|  8   |  SWE     |  90     
|  9   |  SWE     |  40     

和结果(如果存在,前三个分数)应该是这样的:

|coutry    |total 
|  USA     |  230 
|  GER     |  130 
|  SWE     |  160 

只能通过sql解决这个问题吗?我将使用php foreach ...

获取最终结果

3 个答案:

答案 0 :(得分:2)

limit关键字应该可以解决问题:

SELECT   country, SUM(`sum`)
FROM     my_table
GROUP BY country
ORDER BY 2 DESC
LIMIT    3

答案 1 :(得分:2)

您需要建立一个行号以获得每个国家/地区的前3个总和。要使用MySql执行此操作,您必须使用用户定义的变量。

SELECT country, SUM(`sum`)
FROM (
    SELECT *, 
        @rn:=IF(@prevCountry=country,@rn+1,1) rn,
        @prevCountry:=country
    FROM yourtable, (SELECT @rn:=0, @prevCountry:='') t
    ORDER BY country, `sum` DESC
  ) t
WHERE rn <= 3
GROUP BY country
ORDER BY country

答案 2 :(得分:0)

在此尝试,因为@Mureinik有权。

SQL Fiddle

按国家/地区排序DESC解决“TOP”问题。