webForumDet fria alternativet

Dubbel SUM

Databaser & SQLur Databashanterare & SQL

10 svar · 473 visningar · startad av Skarre

Medlem sedan apr. 20012 427 inlägg
Frågan#1

Jag har information om spelade basketmatcher i tabellen "games" och jag vill räkna ut gjorda poäng, alltså summan "homescore" där ett givet lag var hemmalag plus summan av awayscore där det givna laget var bortalag. Med andra ord vill jag kombinera dessa två frågor:

SELECT SUM(homescore) FROM games WHERE hometeam = 1
SELECT SUM(awayscore) FROM games WHERE awayteam = 1;

I förlängningen kommer jag även att behöva räkna ut insläppta poäng:

SELECT SUM(homescore) FROM games WHERE awayteam = 1
SELECT SUM(awayscore) FROM games WHERE hometeam = 1;

... och målskillnad d.v.s. gjorda poäng minus insläppta poäng.

Medlem sedan maj 20012 812 inlägg
#2

Du kan inte kombinera dessa två i en SQL sats eftersom du vill ha information för 2 olika vilkor.

Du kan lösa det med en UNION mellan dina 2 SQL satser då kommer du få tillbaka 1 resultat. Annars så kanske detta fungerar, har inte testat så jag vet fasktiskt inte.

SELECT TOP 1 (SELECT SUM(homescore) FROM games WHERE hometeam = 1) as test, (SELECT SUM(awayscore) FROM games WHERE awayteam = 2) as test2 FROM games

- M

Medlem sedan dec. 200012 464 inlägg
#3
select sum(case when hometeam = 1 then homescore 
                          when awayteam = 1 then awayscore
    else 0 end) as totalScore
from games
where 1 in (hometeam,awayteam)

eller om du använder access

select sum(iif(hometeam=1,homescore,
                      iif(awayteam=1,awayscore,0))) as totalScore
from games
where 1 in (hometeam,awayteam)
Medlem sedan apr. 20012 427 inlägg
#4

Du är helt underbar Lars! :)

Medlem sedan apr. 20012 427 inlägg
#5

Jag har ytterligare en liten fundering angående detta. När laget inte spelat någon match och dess id således inte finns i tabellen "games" returnerar frågan NULL vilket pajar resultattabellen. Går det att se till att frågan returnerar 0 i detta fall?

Medlem sedan dec. 200012 464 inlägg
#6

Har du någon tabell där alla lag finns? Säg att du har en sådan och den heter teams och har kolumnerna

teamid och teamname. I så fall kan du få summa för alla lag med

select teamname, 
   sum(case when hometeam = teamid then
       homescore else 0 end + 
case when awayteam = teamid then 
awayscore else 0 end)
from teams left outer join games
  on teamid in (hometeam,awayteam)
group by teamname
Medlem sedan maj 20012 812 inlägg
#7
select sum(case when hometeam = 1 then homescore 
                          when awayteam = 1 then awayscore
    else 0 end) as totalScore
from games
where 1 in (hometeam,awayteam)

Men då får man ju bara en totalsumma och inte 2 delsummor. Kan man få både AwaySum och HomeSum i en och samma SQL Sats.

- M

Medlem sedan dec. 200012 464 inlägg
#8

Kan man få både AwaySum och HomeSum i en och samma SQL Sats.

Jo visst, det är inga problem.

Medlem sedan maj 20012 812 inlägg
#9

Jo visst, det är inga problem.

Så bra.. du förtsätter jag att leva i kunskap om att det går, men i okunskap hur man gör :) *morrrr*

- M

Medlem sedan dec. 200012 464 inlägg
#10
select sum(case when hometeam = 1 then homescore 
                   else 0 end) as totalHomescore,
           sum(case when awayteam = 1 then awayscore
    else 0 end) as totalawayScore
from games
where 1 in (hometeam,awayteam)
Medlem sedan maj 20012 812 inlägg
#11

Bläää... det borde jag ju kunnat lista ut. Snygg lösning, men hur snabb är den. Känns nästan som att 2 vanliga SQL frågor hade varit snabbare.

Tack för lösningen. :birp

141 ms totalt · 3 externa anrop · v20260731065814-full.55e59744
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)