Avatar billede frets Nybegynder
28. oktober 2004 - 18:00 Der er 34 kommentarer og
1 løsning

Brug af sum sammen med joins

Mine tabeller:
Spillere: ID, navn (Eks. 23, Ib)
SpillerStats, spillerID, kampID, maal, gult, rodt (Eks. [23, 485, 2, 0, 1] og [23, 512, 1, 0, 0])

Hvordan laver jeg en query som lægger antallet af kampe sammen og tæller antallet af mål, gule og rødekort sammen, således jeg får en guery  som giver et resultat ala: SpillerID, navn, kampe, mål, gult, rødt (23, Ib, 2, 3, 0, 1)
Avatar billede hmortensen Nybegynder
28. oktober 2004 - 18:32 #1
Måske noget i den her retning:
SELECT Spillere.ID AS SpillerID, Spillere.navn AS navn, COUNT(SpillerStats.kampID) AS kampe, SUM(SpillerStats.maal) AS maal, SUM(SpillerStats.gult) AS gult, SUM(SpillerStats.rodt) AS rodt FROM Spillere, SpillerStats WHERE Spillere.ID = SpillerStats.spillerID GROUP BY SpillerStats.spillerID
Avatar billede frets Nybegynder
28. oktober 2004 - 18:36 #2
Jeg får en fejl: Du har forsøgt en forespørgsel, der ikke medtager det angivne udtryk "spillerID" som en del af aggregatfunktionen
Avatar billede jkrons Professor
28. oktober 2004 - 18:49 #3
Hvis du breuger aggregatfunktioner skal alle felterne indgå i aggregatfunktionen. Du kan evt. sige GROUP BY SpillerID til sidst, men jeg tror det giver et forkert resultat.
Avatar billede frets Nybegynder
28. oktober 2004 - 20:03 #4
Jeg har prøvet hmortensens forslag, men får den omtalte fejlbesked.
Hvordan kommer jeg videre?
Avatar billede hmortensen Nybegynder
28. oktober 2004 - 20:05 #5
Jeg kan desværre ikke hjælpe dig, hvis det der ikke virker
Avatar billede jkrons Professor
28. oktober 2004 - 20:07 #6
Måske skyldes alle hmortensens As sætninger. Så vidt jeg husker vil acess lave aggregatfunktionen først, og så "aliase" feltnavnene til sidst, men jeg kan huske forkert.
Avatar billede frets Nybegynder
28. oktober 2004 - 20:07 #7
Jeg er ikke helt med... kan du komme med et eksempel?
Avatar billede jkrons Professor
28. oktober 2004 - 20:09 #8
SELECT Spillere.ID, Spillere.navn, COUNT(SpillerStats.kampID) AS kampe, SUM(SpillerStats.maal) AS maal, SUM(SpillerStats.gult) AS gult, SUM(SpillerStats.rodt) AS rodt FROM Spillere, SpillerStats WHERE Spillere.ID = SpillerStats.spillerID GROUP BY SpillerStats.spillerID
Avatar billede frets Nybegynder
28. oktober 2004 - 20:11 #9
Jeg får stadig en fejl: Du har forsøgt en forespørgsel, der ikke medtager det angivne udtryk "ID" som en del af aggregatfunktionen
Avatar billede jkrons Professor
28. oktober 2004 - 20:16 #10
Hvad sker der hvis du fjerne Spillere.ID fra sætningen?
Avatar billede frets Nybegynder
28. oktober 2004 - 20:23 #11
Så er det bare navn det er galt med... Jeg har prøvet at fjerne navn også, men så siger den indsæt parameterværdi.
Avatar billede jkrons Professor
28. oktober 2004 - 20:27 #12
Jeg tror faktisk at problemet er som jeg skitsere tidligere, at alle felter skal indgå i aggregatfunktionen. Prøv for forsøgets skyld at ændre til

SELECT Count(Spillere.ID) AS SpillerID, Count(Spillere.navn) AS navn, COUNT(SpillerStats.kampID) AS kampe, SUM(SpillerStats.maal) AS maal, SUM(SpillerStats.gult) AS gult, SUM(SpillerStats.rodt) AS rodt FROM Spillere, SpillerStats WHERE Spillere.ID = SpillerStats.spillerID GROUP BY SpillerStats.spillerID
Avatar billede frets Nybegynder
28. oktober 2004 - 20:31 #13
Så skete der noget... det ser ikke ud til at den ligger tallene sammen...
Avatar billede jkrons Professor
28. oktober 2004 - 20:37 #14
Næh, det gør den nok ikke, men det at forespørgslen nu kører bekræfter mig i, at problemet ligger i at felterne ikke indgik i aggregatfunktionen.

Jeg er til gengæld ikke helt sikker på, at man overhovedet kan det, du gerne vil.

Hvad sker der, hvis du udelader spillertabellen og lave queryen alene på spillerstats tabellen?
Avatar billede frets Nybegynder
28. oktober 2004 - 20:38 #15
Så regner den alle tallene sammen
Avatar billede jkrons Professor
28. oktober 2004 - 20:56 #16
Som den skal, eller forkert?
Avatar billede frets Nybegynder
28. oktober 2004 - 22:47 #17
Den regner alle tal sammen i en række og ikke pr. spiller.
Avatar billede frets Nybegynder
28. oktober 2004 - 22:55 #18
Jeg fik den løst:
SELECT Spillere.ID AS SpillerID, Spillere.navn AS navn, COUNT(SpillerStats.kampID) AS kampe, SUM(SpillerStats.maal) AS maal, SUM(SpillerStats.gult) AS gult, SUM(SpillerStats.roedt) AS rodt FROM Spillere, SpillerStats WHERE Spillere.ID = SpillerStats.spillerID GROUP BY Spillere.ID, Spillere.navn;
Avatar billede jkrons Professor
28. oktober 2004 - 22:56 #19
Ok. Så prøv med noget i denne stil:


SELECT SpillerID, Count(KampID), Sum(maal), Sum(gult), Sum(rodt)
GROUP BY Spillerid.
Avatar billede jkrons Professor
28. oktober 2004 - 22:57 #20
Fint at du fik det løst.
Avatar billede frets Nybegynder
28. oktober 2004 - 22:59 #21
Er det iorden at i deler pointene, som tak for hjælpen? 10 til hmortensen og 20 til jkrons?
Avatar billede jkrons Professor
28. oktober 2004 - 23:02 #22
Fint nok med mig :-)
Avatar billede jkrons Professor
28. oktober 2004 - 23:03 #23
svar.
Avatar billede frets Nybegynder
28. oktober 2004 - 23:03 #24
Så smid et svar
Avatar billede frets Nybegynder
28. oktober 2004 - 23:04 #25
Nå.. du fik sgu alle pointene... sådan er det at være hurtig på tasterne :)
Avatar billede jkrons Professor
28. oktober 2004 - 23:05 #26
Jeg laver et spørgsmål med de 10 point til hmortensen og med reference til dette.
Avatar billede frets Nybegynder
28. oktober 2004 - 23:06 #27
Ok
Avatar billede frets Nybegynder
28. oktober 2004 - 23:16 #28
Lige et sidste spørgsmål: kan jeg sortere mine data stigende og faldene efter eks. mål? Jeg har prøvet med GROUP BY maal DESC
Avatar billede jkrons Professor
28. oktober 2004 - 23:31 #29
ORDER BY maal DESC
Avatar billede frets Nybegynder
28. oktober 2004 - 23:36 #30
Hvor kan jeg bruge ORDER BY?
Jeg har prøvet efter GROUP BY

Du har forsøgt en forespørgsel, der ikke medtager det angivne udtryk "maal" som en del af aggregatfunktionen
Avatar billede jkrons Professor
28. oktober 2004 - 23:47 #31
Det er lidt længe siden jeg har arbejdet med aggregatfunktioner, så hukommelsen er måske lidt rusten. Prøv at lave en ny forespørgsel, baseret på den oprindelige forespørgsel og i denne bare taget felterne med, og så sortere efter fx maal.
Avatar billede frets Nybegynder
28. oktober 2004 - 23:52 #32
Jeg fandt ud af det (hvis man bare kigger sig for i designvisning, i stedet for at lege selv i sql)
ORDER BY Sum(SpillerStats.maal) DESC som indsættes efter GROUP BY...
Avatar billede jkrons Professor
28. oktober 2004 - 23:54 #33
Ja selvfølgelig. Det måp være ved at være for sent. Du har jo slet ikke maal i din forespørgsel, kun Sum(maal). Sorry.
Avatar billede frets Nybegynder
28. oktober 2004 - 23:55 #34
Jeg er også ved at være en smule træt... så er det man ikke tænker så klart mere... men tusinde tak for hjælpen.
Avatar billede jkrons Professor
28. oktober 2004 - 23:56 #35
Velbekomme.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester