/ / Wählen Sie mehrere top3 aus der Datenbank aus - mysql, sql

Wählen Sie mehrere top3 aus der Datenbank - mysql, sql

Ich möchte eine Datenbankansicht erstellen. Ich habe eine Tabelle, die Aufzeichnungen über die Völker enthält, die im Laufe des Jahres einige logische Beispiele gelöst haben, und dafür haben sie Punkte bekommen.

Ich muss eine Ansicht aus einer SQL-Abfrage erstellen, aber ich habe ein Problem - Ich muss jedes Jahr TOP 3-Benutzer durch eine Abfrage erhalten.

SELECT solver, year, SUM(points) as TotalPoints
FROM solving
GROUP BY solver, year
ORDER BY year, TotalPoints DESC

Ich habe Löser pro Jahr nach Punkten und Jahr sortiert. Ich weiß, dass ich Limit verwenden muss, aber ich weiß auch, dass ich eine Auswahl mehr benötigen werde, aber ich weiß nicht, wo.

Antworten:

0 für die Antwort № 1

Es gibt mehrere Möglichkeiten, dieses Problem in MySQL zu lösen. Am effizientesten ist es wahrscheinlich, Variablen zu verwenden. Im Folgenden werden die Werte aufgelistet:

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;

Verwenden Sie dann diese Unterabfrage, um die ersten drei zu erhalten:

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;

0 für die Antwort № 2

das kann dir helfen.

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;