---
title: "Top på gruppering"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/77903-top-på-gruppering"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "Vide"
published: "2003-05-24T10:20:35.000Z"
updated: "2003-05-24T17:41:18.000Z"
replies: 9
views: 279
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/databaser-sql/77903-top-på-gruppering"
---

# Top på gruppering

## #1 — Vide, 2003-05-24T10:20Z

Hejsan,

Har en tabell där jag lagrar statistik för frisbeegolf.

Kolumnen player innehåller ett id som representerar vilken spelare som har resultatet.

Kolumnen score är värdet för ett specifikt "hål", varav SUM ger totalen den rundan.

Kolumnen roundid är vilken runda som spelats.

Jag vill nu ha ut vem som vunnit rundan, vilken player och vilken sumscore denne fick, samt få ut roundid samtidigt.

Min nuvarande SQL-sats ser ut såhär:

```
SELECT player, SUM(score) AS sumscore, roundid
FROM stats
GROUP BY roundid, player
ORDER BY roundid DESC, sumscore DESC
```

Men eftersom jag måste gruppera på player så får jag ju ut alla spelare, jag vill bara den som har lägst sumscore.

Mvh, Vide

Permalänk: https://www.webforum.nu/p/77903

## #2 — juventus1, 2003-05-24T10:26Z

```
SELECT player, SUM(score) AS sumscore, roundid
FROM stats
GROUP BY roundid, player
HAVING MIN(score)
ORDER BY roundid DESC, sumscore DESC
```

Permalänk: https://www.webforum.nu/p/1060100

## #3 — Vide, 2003-05-24T10:48Z

Det fungerar inte, grejjen är att det är 9 eller 18 hål, alltså 9 eller 18 poster per player och roundid.

Tack ändå! :)

Permalänk: https://www.webforum.nu/p/1060114

## #4 — LarsG, 2003-05-24T14:18Z

```
SELECT player, SUM(score) AS sumscore, roundid
FROM stats as s
GROUP BY roundid, player
having sum(score) = (select max(s) 
    from (select sum(score) as s 
            from stats 
           where roundid = s.roundid)dt)
ORDER BY roundid DESC
```

Vad har 9 eller 18 hål för betydelse?

Permalänk: https://www.webforum.nu/p/1060287

## #5 — Vide, 2003-05-24T14:33Z

Nu får jag bara en post ur SQL-satsen, jag skulle vilja ha alla unika roundid med så att man får vinnaren i varje runda så att säga.

Skillnaden mellan 9 och 18 är bara antalet poster, så egentligen spelar det inte någon roll här.

```
player	score	roundid	hole
1	3	1	1
2	3	1	1
1	2	1	2
2	2	1	2
1	3	1	3
1	3	1	4
1	3	2	1
1	2	2	2
1	3	2	3
1	3	2	4
o.s.v
```

Permalänk: https://www.webforum.nu/p/1060298

## #6 — LarsG, 2003-05-24T14:54Z

Hmm, jag tycker att min förra borde fungera ... 

```
select player, roundid, sum(score) 
       from stats s
   where (select sum(score) from stats 
         where player = s.player
           and round = s.roundid) >=
         (select sum(score) from stats 
         where round = s.roundid)
  group by player,roundid
```

Permalänk: https://www.webforum.nu/p/1060316

## #7 — Vide, 2003-05-24T15:01Z

Skumt detta, jag får fortfarande bara ut enda post.

Ändrar jag operatorn till \< så får jag alla, \> ger inga träffar och = ger bara en.

Permalänk: https://www.webforum.nu/p/1060320

## #8 — LarsG, 2003-05-24T15:28Z

```
select player,roundid,s
  from (
    select player, roundid, sum(score) s
      from stats) dt
     where s = (select max(s) 
                 from (select player, roundid, sum(score) s
                         from stats) x
                where roundid = dt.roundid)
```

Det finns väl mer än en runda inlagd? ;)

Permalänk: https://www.webforum.nu/p/1060340

## #9 — Vide, 2003-05-24T16:51Z

Den fungerade som tänkt. Tackar. :)

Dock tar det längre tid än vad som kan tänkas rimligt (typ 15 sekunder).

Skall testa att göra en SP av den och om det hjälper.

Permalänk: https://www.webforum.nu/p/1060434

## #10 — Vide, 2003-05-24T17:41Z

Det hjälpte inte att göra en SP av den, och kollar man på CPU-belastningen så drar sql-server fullt när man kör frågan.

Jag har lagt till filter i den för att lättare testa, finns det något sätt att göra den prestandamässigt CPU-snålare?

```
CREATE PROCEDURE spGetWins
@intCid int,
@intUid int
AS
select count(*) as wins from
(
SELECT s as wins, player, roundid, course
FROM (SELECT player, roundid, SUM(score) s, course
      FROM stats
      GROUP BY player, roundid, course) dt
WHERE s =
        (SELECT MIN(s)
      FROM (SELECT player, roundid, SUM(score) s
            FROM stats
            GROUP BY player, roundid, course) x
      WHERE roundid = dt.roundid)
and player = @intUid and course = @intCid
) y
```

Permalänk: https://www.webforum.nu/p/1060466

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/77903-top-på-gruppering
