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)
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
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
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.
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.
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
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
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;
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.
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...
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.