---
title: "Räkna ut tabell"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/86845-räkna-ut-tabell"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "andreas_lindh"
published: "2003-09-24T11:10:15.000Z"
updated: "2003-09-25T15:15:14.000Z"
replies: 5
views: 362
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/86845-räkna-ut-tabell"
---

# Räkna ut tabell

## #1 — andreas_lindh, 2003-09-24T11:10Z

Jag har den här sql-frågan för att räkna ut en hockeytabell

```
SELECT s_deltagande_lag.ID, s_deltagande_lag.Namn,s_deltagande_lag.serie_id,
@games := Count(s_matcher.ID) AS games,
@win := Sum((s_deltagande_lag.ID=lagid_a And resultat_a > resultat_b )Or (s_deltagande_lag.ID=lagid_b And resultat_a<resultat_b)) AS win,
@tie := Sum(resultat_a=resultat_b) AS tie,
@lost := ((Count(s_matcher.ID))-(Sum((s_deltagande_lag.ID=lagid_a And resultat_a > resultat_b )Or (s_deltagande_lag.ID=lagid_b And resultat_a<resultat_b)))-(Sum(resultat_a=resultat_b))) as lost,
@poang:= ((Sum((s_deltagande_lag.ID=lagid_a And resultat_a > resultat_b )Or (s_deltagande_lag.ID=lagid_b And resultat_a<resultat_b))*2) + (Sum(resultat_a=resultat_b))) AS poang,
@plus := Sum((s_deltagande_lag.ID=lagid_a)*resultat_a + (s_deltagande_lag.ID=lagid_b)*resultat_b) as plus,
@minus := Sum((s_deltagande_lag.ID=lagid_a)*resultat_b + (s_deltagande_lag.ID=lagid_b)*resultat_a) as minus,
@plusminus := Sum((s_deltagande_lag.ID=lagid_a)*resultat_a + (s_deltagande_lag.ID=lagid_b)*resultat_b) - Sum((s_deltagande_lag.ID=lagid_a)*resultat_b + (s_deltagande_lag.ID=lagid_b)*resultat_a) as plusminus 
FROM s_deltagande_lag LEFT JOIN s_matcher ON s_deltagande_lag.ID=s_matcher.lagid_a Or s_deltagande_lag.ID=s_matcher.lagid_b 
where s_deltagande_lag.serie_ID = 42 and s_matcher.uppdaterad = 1 
GROUP BY ID, Namn ORDER BY 8 DESC, 11 DESC, 9 DESC, 10 ASC
```

Den fungerar bra när det är matcher spelade men när det inte är några matcher spelade skrivs inga lag ut.
S_matcher.uppdaterad är 1 när matchen är spelad.

Kan jag skriva ut lagen även om inga matcher är spelade med den här frågan eller ska jag köra 2 olika frågor?

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

## #2 — andreas_lindh, 2003-09-24T13:18Z

Löste det med case when

```
SELECT s_deltagande_lag.ID, s_deltagande_lag.Namn,s_deltagande_lag.serie_id,
@games := Count(s_matcher.ID) AS games,
@win := case when s_matcher.uppdaterad = 1 then Sum((s_deltagande_lag.ID=lagid_a And resultat_a > resultat_b )Or (s_deltagande_lag.ID=lagid_b And resultat_a<resultat_b)) else 0 end AS win,
@tie := case when s_matcher.uppdaterad = 1 then Sum(resultat_a=resultat_b) else 0 end AS tie,
@lost := case when s_matcher.uppdaterad = 1 then ((Count(s_matcher.ID))-(Sum((s_deltagande_lag.ID=lagid_a And resultat_a > resultat_b )Or (s_deltagande_lag.ID=lagid_b And resultat_a<resultat_b)))-(Sum(resultat_a=resultat_b))) else 0 end as lost,
@poang:= case when s_matcher.uppdaterad = 1 then ((Sum((s_deltagande_lag.ID=lagid_a And resultat_a > resultat_b )Or (s_deltagande_lag.ID=lagid_b And resultat_a<resultat_b))*2) + (Sum(resultat_a=resultat_b))) else 0 end AS poang,
@plus := case when s_matcher.uppdaterad = 1 then Sum((s_deltagande_lag.ID=lagid_a)*resultat_a + (s_deltagande_lag.ID=lagid_b)*resultat_b) else 0 end as plus,
@minus := case when s_matcher.uppdaterad = 1 then Sum((s_deltagande_lag.ID=lagid_a)*resultat_b + (s_deltagande_lag.ID=lagid_b)*resultat_a) else 0 end as minus,
@plusminus := case when s_matcher.uppdaterad = 1 then Sum((s_deltagande_lag.ID=lagid_a)*resultat_a + (s_deltagande_lag.ID=lagid_b)*resultat_b) - Sum((s_deltagande_lag.ID=lagid_a)*resultat_b + (s_deltagande_lag.ID=lagid_b)*resultat_a) else 0 end as plusminus
FROM s_deltagande_lag LEFT JOIN s_matcher ON s_deltagande_lag.ID=s_matcher.lagid_a Or s_deltagande_lag.ID=s_matcher.lagid_b 
where s_deltagande_lag.serie_ID = 2 
GROUP BY ID, Namn ORDER BY 8 DESC, 11 DESC, 9 DESC, 10 ASC
```

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

## #3 — andreas_lindh, 2003-09-25T11:04Z

Nytt problem. När inga matcher är spelade skrivs lagnamnet ut och games, win, tie... blir 0. Men när en match är spelad räknas tabellen ut på alla matcher i serien även dom som inte är spelade så resultatet kan bli

Lag 1 26 matcher 1 seger 25 oavgjorda 0 förluster 27 poäng
Lag 2 26 matcher 0 segrar 25 oavgjorda 1 förlust 25 poäng

Går det att göra så att frågan bara räknar med de spelade matcherna?

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

## #4 — LarsG, 2003-09-25T12:18Z

Hur vet att en match är spelad?

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

## #5 — andreas_lindh, 2003-09-25T12:44Z

Jag har ett fält i tabellen s_matcher som heter uppdaterad. När matchen är spelad sätts updpaterad till 1, om matchen inte är spelad är uppdaterad 0

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

## #6 — aasah, 2003-09-25T15:15Z

Efter som du kräver att den ska vara 1 i din where-klausul måste det vara något annat fel... ? :q

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

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/86845-räkna-ut-tabell
