webForumDet fria alternativet

Dubbel SUM

10 svar · 473 visningar · startad av Skarre

SkarreMedlem sedan apr. 20012 447 inlägg
#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.

GladhMedlem sedan maj 20013 024 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

LarsGMedlem sedan dec. 200012 465 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)
SkarreMedlem sedan apr. 20012 447 inlägg
#4

Du är helt underbar Lars! :)

SkarreMedlem sedan apr. 20012 447 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?

LarsGMedlem sedan dec. 200012 465 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
GladhMedlem sedan maj 20013 024 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

LarsGMedlem sedan dec. 200012 465 inlägg
#8

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

Jo visst, det är inga problem.

GladhMedlem sedan maj 20013 024 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

LarsGMedlem sedan dec. 200012 465 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)
GladhMedlem sedan maj 20013 024 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

Genererad på 376 ms · cache AV · v20260730165559-full.f96bc7eb