题目是我对以下问题的解决办法的想法,但我当然不想把你的答案限制在这一点上。
数据库说明:
表:选手
列: Player_id (整数主键索引)、Team_id (整数)、Player_name (文本)、Player_points (整数)、Player_status (ENUM 'Ok‘、'NotOk')
我想拥有5名球员,每支球队的得分最多(1,2,3)。
第1-5排第1队、第6-10队第2队、第11至第15队第3队,每个队的队员按分数排序,然后按每个队的状态排序,在一个查询中(更正:或在没有选择的情况下更多的查询)。
第1-5行(如team_id 1所示):
H 210f 211第6-10行(用于team_id 2):
H 12113,2,Smith,5000,OkH 222f 223
第11-15行(适用于team_id 3):
H 13322,3,Lohaus,7000,NotOkH 234f 235
我正在寻找一种性能良好的解决方案。表将有数千个数据,但Team_id的只有3 (NBA球队/球员只是为了演示)
发布于 2011-09-05 21:54:34
试一试
SELECT * FROM
(
SELECT Player_id, Team_id, Player_name, Player_points, Player_status FROM Players WHERE Team_id = 1 ORDER BY Team_id, Player_points DESC, Player_status DESC LIMIT 5
UNION ALL
SELECT Player_id, Team_id, Player_name, Player_points, Player_status FROM Players WHERE Team_id = 2 ORDER BY Team_id, Player_points DESC, Player_status DESC LIMIT 5
UNION ALL
SELECT Player_id, Team_id, Player_name, Player_points, Player_status FROM Players WHERE Team_id = 3 ORDER BY Team_id, Player_points DESC, Player_status DESC LIMIT 5
)
ORDER BY Team_id, Player_points DESC, Player_status DESC编辑-根据注释:将UNION更改为UNION ALL。
发布于 2011-09-05 22:03:08
这可能不容易优化,但它应该适用于任何数量的团队。
SELECT Player_ID, Team_ID, Player_name, Player_points, Player_status
FROM Players
WHERE (
SELECT COUNT(*)
FROM Players AS p
WHERE p.Team_ID = Players.Team_ID
AND p.Player_points > Players.Player_points
) <= 5
ORDER BY Team_ID ASC, Player_points DESC, Player_status DESChttps://stackoverflow.com/questions/7312952
复制相似问题