| id | user | team | month | result |
|----|-------|--------|-------|--------|
| 1 | Joe | red | sept | 100 |
| 2 | Joe | red | oct | 40 |
| 3 | Jim | red | sept | 70 |
| 4 | Jim | red | oct | 50 |
| 5 | Susy | red | sept | 40 |
| 6 | Tim | blue | sept | 60 |
| 7 | Tim | blue | oct | 100 |
| 8 | Betty | blue | sept | 70 |
| 9 | Dave | blue | sept | 20 |
| 10 | Stan | green | oct | 40 |
| 11 | Alan | green | sept | 80 |
| 12 | Tina | green | oct | 100 |
| 13 | Tina | green | sept | 30 |
| 14 | Rick | yellow | oct | 50 |
| 15 | Ellen | yellow | oct | 60 |
这可能。
我需要获得每个团队最多2个用户,并获得最佳结果。
例如,以下结果是每支球队得分最高的2位球员:
| 1 | Joe | red | sept | 100 |
| 3 | Jim | red | sept | 70 |
| 7 | Tim | blue | oct | 100 |
| 8 | Betty | blue | sept | 70 |
| 12 | Tina | green | oct | 100 |
| 11 | Alan | green | sept | 80 |
| 15 | Ellen | yellow | oct | 60 |
| 14 | Rick | yellow | oct | 50 |
或者是使用多个查询执行此操作的唯一方法吗?
答案 0 :(得分:3)
你可以这样做:
SELECT * FROM
(SELECT t.id,t.team,count(*) as rnk
FROM YourTable t
INNER JOIN YourTable s
ON(t.id = s.id and t.team = s.team and t.result >= s.result))x
WHERE rnk <= 2
答案 1 :(得分:2)
您可以尝试以下操作:
select t.*
from `tbl` t
where ( select count(*)
from `tbl`
where `team` = t.`team` and `result` >= t.`result` ) < 3