---
title: "Group by"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/89684-group-by"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "andreas_lindh"
published: "2003-11-05T09:27:46.000Z"
updated: "2003-11-07T21:29:02.000Z"
replies: 4
views: 209
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/89684-group-by"
---

# Group by

## #1 — andreas_lindh, 2003-11-05T09:27Z

Jag har en sql fråga som räknar ut hur mpnga poäng varje användare har i en tipstävling.
Nu har jag fått problem med group by. Det fungerade i mysql men inte nu när jag bytt till msSql.

```
CREATE PROCEDURE [tibroik1].[topplista]
@userID int, @omgang int
AS
Select top 15 s.id,s.omgang,s.serie_ID,m_id,t.uID,u.username,
count(t.id) as games,
(sum(case when s.ID = t.m_ID and (s.resultat_a = t.res_a and s.resultat_b = t.res_b) then 1 else 0 end)*3) as fpoints,
(sum(case when s.ID = t.m_ID and ((s.resultat_a = resultat_b and t.res_a = t.res_b) and (t.res_a <> s.resultat_a and t.res_b <> s.resultat_b)) then 1 else 0 end)*2) as ties,
(sum(case when s.ID = t.m_ID and ((s.resultat_a > s.resultat_b and t.res_a > t.res_b) and (s.resultat_a <> t.res_a and ((s.resultat_b <> t.res_b) or (s.resultat_b = t.res_b))) or (s.resultat_a <> t.res_a and t.res_a < t.res_b) and (s.resultat_b <> t.res_b and ((s.resultat_a <> t.res_a) or (s.resultat_a=t.res_a)))) then 1 else 0 end)) as points,
(sum(case when s.id = t.m_ID and (s.resultat_a = t.res_a and s.resultat_b = t.res_b) then 1 else 0 end)*3) + (sum(case when s.id = t.m_ID and ((s.resultat_a = s.resultat_b and t.res_a = t.res_b) and (t.res_a <> s.resultat_a and t.res_b <> s.resultat_b)) then 1 else 0 end)*2) + sum(case when s.ID = t.m_ID and ((s.resultat_a > s.resultat_b and t.res_a > t.res_b) and (s.resultat_a <> t.res_a and ((s.resultat_b <> t.res_b) or (s.resultat_b = t.res_b))) or (s.resultat_a <> t.res_a and t.res_a < t.res_b) and (s.resultat_b <> t.res_b and ((s.resultat_a <> t.res_a) or (s.resultat_a=t.res_a)))) then 1 else 0 end) as tpoints
FROM s_matcher s inner join tMatcher t on s.id = t.m_ID
left join tusers u on u.ID = t.uID
where s.uppdaterad = 1 and t.uID = @userID and s.omgang = @omgang
group by t.uID
order by tpoints Desc,fpoints Desc
```

Felmeddelande.

```
Column s.id is invalid in the select list becaus it is not contained in either as aggregate function or the group by clause
```

Hur ska jag göra för att det ska fungera?

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

## #2 — doggelito, 2003-11-05T09:52Z

lång rackare!
alla kolumner man hämtar i selecten lär också finnas med i group by, förutom de man beräknar, typ count, sum mfl.

```
CREATE PROCEDURE [tibroik1].[topplista]
@userID int, @omgang int
AS
Select top 15 s.id,s.omgang,s.serie_ID,m_id,t.uID,u.username,
count(t.id) as games,
(sum(case when s.ID = t.m_ID and (s.resultat_a = t.res_a and s.resultat_b = t.res_b) then 1 else 0 end)*3) as fpoints,
(sum(case when s.ID = t.m_ID and ((s.resultat_a = resultat_b and t.res_a = t.res_b) and (t.res_a <> s.resultat_a and t.res_b <> s.resultat_b)) then 1 else 0 end)*2) as ties,
(sum(case when s.ID = t.m_ID and ((s.resultat_a > s.resultat_b and t.res_a > t.res_b) and (s.resultat_a <> t.res_a and ((s.resultat_b <> t.res_b) or (s.resultat_b = t.res_b))) or (s.resultat_a <> t.res_a and t.res_a < t.res_b) and (s.resultat_b <> t.res_b and ((s.resultat_a <> t.res_a) or (s.resultat_a=t.res_a)))) then 1 else 0 end)) as points,
(sum(case when s.id = t.m_ID and (s.resultat_a = t.res_a and s.resultat_b = t.res_b) then 1 else 0 end)*3) + (sum(case when s.id = t.m_ID and ((s.resultat_a = s.resultat_b and t.res_a = t.res_b) and (t.res_a <> s.resultat_a and t.res_b <> s.resultat_b)) then 1 else 0 end)*2) + sum(case when s.ID = t.m_ID and ((s.resultat_a > s.resultat_b and t.res_a > t.res_b) and (s.resultat_a <> t.res_a and ((s.resultat_b <> t.res_b) or (s.resultat_b = t.res_b))) or (s.resultat_a <> t.res_a and t.res_a < t.res_b) and (s.resultat_b <> t.res_b and ((s.resultat_a <> t.res_a) or (s.resultat_a=t.res_a)))) then 1 else 0 end) as tpoints
FROM s_matcher s inner join tMatcher t on s.id = t.m_ID
left join tusers u on u.ID = t.uID
where s.uppdaterad = 1 and t.uID = @userID and s.omgang = @omgang
group by s.id,s.omgang,s.serie_ID,m_id,t.uID,u.username
order by tpoints Desc,fpoints Desc
```

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

## #3 — andreas_lindh, 2003-11-05T09:57Z

ok. När jag tar med alla kolumner i group by räknar den fel. jag vill endast ha med t.uID i group by.

Hur ska jag göra då?

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

## #4 — Engine^, 2003-11-05T11:59Z

Vill endast ha med t.UI i GROUP BY... det skulle inte ge något vettigt, eftersom du vill ha dom 15 posterna med högst totalpoäng för en spelare - *where ... t.uID = @userID ...* Du kanske ska ta och ta bort den delen i where-satsen. Jag antar att du vill få ut top 15 spelare sorterat efter högsta totalpoäng...

Jag har för mig att det i MySQL går att skriva in valfritt antal av selectkolumnerna i group by-delen, men det är ju MySQL det.

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

## #5 — joup, 2003-11-07T21:29Z

Lägg t.uID först i group by.

Alltså:

```
group by t.uID,s.id,s.omgang,s.serie_ID,m_id,u.username
```

Har inte testat det själv, men jag har nyligen konverterat en sida från MySQL till MSSQL vilket har gjort att jag fått skriva om alla mina SQL-satser med group by, och när jag gjort så har jag aldrig stött på några problem.

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

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/89684-group-by
