这是我的问题......
表格如下:
|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 ...
获取最终结果答案 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)