13. april 2005 - 21:08Der er
9 kommentarer og 1 løsning
samle 3 tabeller og lægge tal sammen hvor id'erne er ens
Ja, jeg har siddet og rodet lidt rundt med joins og union, men her ikke rigtigt kunnet få det til at spille maks.
Jeg har 3 tabeller, indeholdende henholdsvis spillerinfo (ifabruger), kampmaal (kampmaal) og kampassist (kampassist).
Tabellerne ser sådan ud: ifabruger: id, fornavne, efternavn (flere ting, men de er ikke relevant i forhold til dette). kampmaal: id, kampId, spillerId, mantal kampassist: id, kampId, spillerId, aantal
Altså kampmaal og kampasist inderholder info om hvilke spillere der her scoret/lagt op til scoring i hvilke kampe, samt antallet af disse pr. kamp.
Det jeg skal have trukket ud er navnene på spillere som enten har scoret, lagt op til scoring eller begge dele, samt antal mål og assist, og en samlet pointhøst (1 assist og 1 scoring giver hvert 1 point) må meget gerne blive lagt sammen i outputtet.
Håber I kan hjælp, for jeg har ikke kunnet samle kampmaal og kampassist, som alle fra begge tabeller kommer med rigtigt.
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.
SELECT b.id, b.fornavne, b.efternavne, COUNT(m.id) as antal_maal, COUNT(a.id) as antal_assist, COUNT(m.id) + COUNT(a.id) as antal_point FROM ifabruger AS b LEFT JOIN kampmaal AS m ON b.id = m.spillerId LEFT JOIN kampassist AS a ON b.id = a.spillerId WHERE m.id IS NOT NULL OR a.id IS NOT NULL GROUP BY b.id ORDER BY antal_point, antal_maal, antal_assist
Oh, nu fangede jeg lige en fejl, altså du har én record pr. kamp - hvor der evt. er flere mål/assists?
SELECT b.id, b.fornavne, b.efternavne, SUM(m.mantal) as antal_maal, SUM(a.aantal) as antal_assist, SM(m.mantal) + SUM(a.aantal) as antal_point FROM ifabruger AS b LEFT JOIN kampmaal AS m ON b.id = m.spillerId LEFT JOIN kampassist AS a ON b.id = a.spillerId WHERE (m.id IS NOT NULL AND m.mantal > 0) OR (a.id IS NOT NULL AND a.aantal > 0) GROUP BY b.id ORDER BY antal_point, antal_maal, antal_assist
Jeps, men jeg har selv lige løst den, ved at samle assist og mål tabellen i én tabel, for så er det jo let nok: SELECT spillerId, fornavn, efternavn, SUM( maal ) AS mål, SUM( assist ) AS ass, sum(maal)+sum(assist) AS samlet FROM kampmaal LEFT JOIN ifabruger ON ifabruger.id = kampmaal.spillerId GROUP BY spillerId
Men jeg tjekker lige din løsning ud, virker den skal du selvfølgelig have pointene.
Det var un ikke på grund af SM, selvom der er nogle som kan lige det ;-) Nej den mangler en enkelt spiller, som har lavet en enkelt assist, vist den sidste i tabellen, samt ved en anden spiller må den tælle dobbelt, da han kun har lavet 2 assist men får 4. Derudover sortere den heller ikke, men det skyldes jo at du ikke har sat ASC/DESC på. Men de første ting, er lidt wird?
Jo den sorterer, men godt nok stigende - ASC sortering er standard. Ved at tilføje DESC (som var min intention) vil den sortere mere logisk.
At den ikke medtager nogle spillere kan jeg ikke lige gennemskue. Men det skyldes jo nok, at flere rækker kommer med flere gange. Det kan godt laves, men bliver straks mere besværligt - der skal vist joines med en ekstra brugertabel for at de kan samles korrekt. Det kan jeg ikke lige overskue, hvordan man skulle lave korrekt, men da du jo har løst det på anden og fornuftigere vis, så er det jo ligegyldigt ;)
Jeps, det var også bare for at du ikke skulle snydes, hvis du havde løst opgaven, men ellers tak for hjælpen.
Synes godt om
Ny brugerNybegynder
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.