Avatar billede totalpc Seniormester
18. oktober 2023 - 21:23 Der er 1 kommentar

Top X af group

Hej
Hvordan skal dette skrive, hvis jeg kun vil have fx top 3 af hver gruppe.

SELECT count(Spicie) as Antal, Team, year(year) as Årstal
  FROM [dbo].[Indvejning]
  group by team, year order by year, antal desc
Avatar billede Keld Broe Seniormester
09. november 2023 - 13:08 #1
For at vælge top 3 af hver gruppe i en SQL query, skal du bruge en underforespørgsel eller en window-funktion som ROW_NUMBER(). Her er et eksempel på, hvordan du kan skrive din forespørgsel ved at anvende ROW_NUMBER():

WITH RankedIndvejninger AS (
  SELECT
    COUNT(Spicie) AS Antal,
    Team,
    YEAR(Year) AS Årstal,
    ROW_NUMBER() OVER (PARTITION BY Team ORDER BY COUNT(Spicie) DESC) AS Rank
  FROM
    [dbo].[Indvejning]
  GROUP BY
    Team,
    YEAR(Year)
)
SELECT
  Antal,
  Team,
  Årstal
FROM
  RankedIndvejninger
WHERE
  Rank <= 3
ORDER BY
  Team,
  Årstal,
  Antal DESC;

Denne forespørgsel anvender en CTE (Common Table Expression) til at tildel en række nummer (Rank) for hver gruppe af Team baseret på antallet af Spicie, sorteret i faldende rækkefølge. Derefter vælger den kun de rækker, hvor Rank er 3 eller mindre, hvilket giver dig top 3 for hver gruppe. Husk at erstatte year(year) med den korrekte kolonnenavn, hvis der er en fejl.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester