我想创建一个数据库视图。我有桌子,其中包含有关人民的记录,在一年中解决了一些合乎逻辑的例子,他们得到了积分。
我需要从SQL查询创建视图,但我遇到了问题 - 我需要每年通过一次查询获得TOP 3用户。
SELECT solver, year, SUM(points) as TotalPoints
FROM solving
GROUP BY solver, year
ORDER BY year, TotalPoints DESC
我每年按照分数和年份排序。我知道我需要使用限制,但我也知道我需要一个选择更多,但我不知道在哪里。
答案 0 :(得分:0)
这可能会帮助你。
SELECT solver,
year,
SUM(points) AS TotalPoints
FROM (
SELECT solver,
year,
SUM(points) AS TotalPoints
FROM solving
ORDER BY year,
TotalPoints DESC
)
WHERE rownum <= 3
ORDER BY year,
TotalPoints DESC;
答案 1 :(得分:0)
在MySQL中有几种方法可以解决这个问题。可能最有效的是使用变量。以下列举了值:
SELECT yt.*,
(@rn := if(@y = year, @rn + 1,
if(@y := year, 1, 1)
)
) as seqnum
FROM (SELECT solver, year, SUM(points) as TotalPoints
FROM solving
GROUP BY solver, year
) yt CROSS JOIN
(SELECT @y := 0, @rn := 0) vars
ORDER BY year, TotalPoints DESC;
然后使用它作为子查询来获得前三名:
SELECT yt.*
FROM (SELECT yt.*,
(@rn := if(@y = year, @rn + 1,
if(@y := year, 1, 1)
)
) as seqnum
FROM (SELECT solver, year, SUM(points) as TotalPoints
FROM solving
GROUP BY solver, year
) yt CROSS JOIN
(SELECT @y := 0, @rn := 0) vars
ORDER BY year, TotalPoints DESC
) yt
WHERE seqnum <= 3;