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
Kategori
Computerworld tilbyder specialiserede kurser i database-management

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