这可以用子查询来完成吗?
Can this be done with a subquery?
我有一个 table 看起来像这样:
Team Name Points
A Peter 26
A John 18
A Carl 20
A Robert 32
A Mike 10
B Tom 22
B Michael 28
B Tina 18
B Donald 35
B Jeff 20
我想从查询中得到一个结果,该结果将给出团队中最好的 3 位用户以及 3 位最高用户的分数总和。
A队得分最高的3人是罗伯特(32分)、彼得(26分)和(卡尔(20分),共计78分。
B 队得分最高的 3 人是 Donald (35)、Michael (28) 和 Tom (22),总共 85 分
所以一定是这样的:
Place Team Points
1 B 85
2 A 78
我试过这样的方法:
SELECT points, user FROM table ORDER BY points DESC, LIMIT 3
这将给我得分最高的 3 个用户,但我还想要这 3 个用户的 SUM,并且这些记录必须是每个团队。
我认为必须用子查询来完成,对吗?
SELECT team,SUM(points) sp FROM
(
(
SELECT * FROM `table` WHERE team = "A" ORDER BY points DESC LIMIT 3
)
UNION ALL
(
SELECT * FROM `table` WHERE team = "B" ORDER BY points DESC LIMIT 3
)
)
AS dbx
GROUP BY team
ORDER BY sp DESC
解释:
您的数据:
获得两队(A 和 B)的最高 3 名。
然后,求和后将它们全部加入。
结果:
我有一个 table 看起来像这样:
Team Name Points
A Peter 26
A John 18
A Carl 20
A Robert 32
A Mike 10
B Tom 22
B Michael 28
B Tina 18
B Donald 35
B Jeff 20
我想从查询中得到一个结果,该结果将给出团队中最好的 3 位用户以及 3 位最高用户的分数总和。
A队得分最高的3人是罗伯特(32分)、彼得(26分)和(卡尔(20分),共计78分。 B 队得分最高的 3 人是 Donald (35)、Michael (28) 和 Tom (22),总共 85 分
所以一定是这样的:
Place Team Points
1 B 85
2 A 78
我试过这样的方法:
SELECT points, user FROM table ORDER BY points DESC, LIMIT 3
这将给我得分最高的 3 个用户,但我还想要这 3 个用户的 SUM,并且这些记录必须是每个团队。
我认为必须用子查询来完成,对吗?
SELECT team,SUM(points) sp FROM
(
(
SELECT * FROM `table` WHERE team = "A" ORDER BY points DESC LIMIT 3
)
UNION ALL
(
SELECT * FROM `table` WHERE team = "B" ORDER BY points DESC LIMIT 3
)
)
AS dbx
GROUP BY team
ORDER BY sp DESC
解释:
您的数据:
获得两队(A 和 B)的最高 3 名。 然后,求和后将它们全部加入。
结果: