Avatar billede KKKnudsen Nybegynder
15. oktober 2013 - 12:56 Der er 13 kommentarer og
1 løsning

COUNT - lade værdi i én kolonne overtrumfe en anden

Hej

Jeg er endnu en begynder udi MySQL og har brug for noget ekspertise.

Baggrund: Til at blive klogere på MySQL og databaser, har jeg lavet en database med byrådsmedlemmer. Jeg har lavet en tabel med disse værdier:

ID, Navn, Kommune, Parti, Partiskift1, Partiskift2

De to sidste kolonner er til at registrere, når et byrådsmedlem har skiftet parti, fx fra Venstre til Konservative. Nogle byrådsmedlemmer skfiter parti flere gange i løbet af en valgperiode.

Eksempel på poster:
1, Jens, Givsted, Socialdemokratiet, NULL, NULL
2, Kirsten, Givsted, Socialdemokratiet, SF, NULL
3, Anders, Givsted, Venstre, Konservative, Liberal Alliance


Jeg vil gerne lave to typer udtræk:

1) Hvor mange medlemmer hvert parti fik ved valget:
Socialdemokratiet = 2
Venstre = 1

2) Hvor mange medlemmer hvert parti har lige nu:
Socialdemokratiet = 1
SF = 1
Liberal Alliance = 1


1'eren er let nok, det er bare et COUNT i kolonnen Parti.

Men hvordan laver jeg 2'eren?


Med venlig hilsen
Kenneth
Avatar billede michael_stim Ekspert
15. oktober 2013 - 13:22 #1
SELECT parti, COUNT(parti) FROM dinTabel GROUP BY parti;

Er det noget á la det du leder efter?
Avatar billede michael_stim Ekspert
15. oktober 2013 - 13:24 #2
Nu forstår jeg, 2 sekunder.
Avatar billede arne_v Ekspert
15. oktober 2013 - 14:41 #3
erstat:

Parti

med:

COALESCE(Partiskift2, Partiskift1, Parti)
Avatar billede KKKnudsen Nybegynder
15. oktober 2013 - 16:31 #4
Hej Arne

Tak for det. Jeg kan se, at du er inde på det rigtige, men kan du også forklare mig, hvordan jeg tæller partierne sammen?

Hvis jeg bruger:
SELECT COALESCE(Partiskift2, Partiskift1, Parti) as AntalPartier FROM `byrådsmedlemmer`

- så får jeg en liste over samtlige byrådsmedlemmers aktuelle parti.


Hvis jeg bruger:
SELECT COUNT(COALESCE(Partiskift2, Partiskift1, Parti)) as AntalPartier FROM `byrådsmedlemmer`

- får jeg et tal, der viser det samlede antal byrådsmedlemmer.


Jeg vil gerne vide, hvor mange medlemmer, de enkelte partier har lige nu. Løsningen må være, først at bruge COALESCE og derefter COUNT - men hvordan fletter jeg de to queries?
Avatar billede arne_v Ekspert
15. oktober 2013 - 16:39 #5
Du mangler GROUP BY
Avatar billede KKKnudsen Nybegynder
15. oktober 2013 - 17:05 #6
Tak!

querien

SELECT COALESCE(Partiskift2, Partiskift1, Parti),COUNT(COALESCE(Partiskift2, Partiskift1, Parti)) as Antal FROM `kandidater` GROUP BY COALESCE(Partiskift2, Partiskift1, Parti)

gav mig det ønskede resultat.
Avatar billede KKKnudsen Nybegynder
15. oktober 2013 - 17:07 #7
- nu mangler jeg at gennemskue, hvordan jeg giver point for korrekt afgivet svar ...
Avatar billede michael_stim Ekspert
15. oktober 2013 - 19:17 #8
Hov glemte det her. Du kan gøre som Arne skriver eller bygge din database op på en anden måde (normalisere), hvilket jeg nok havde foretrukket
Avatar billede michael_stim Ekspert
15. oktober 2013 - 19:21 #9
Ang. Point, så venter du på at Arne kommer med et svar, så accepterer du hans svar og spørgsmålet lukkes.
Avatar billede arne_v Ekspert
15. oktober 2013 - 19:31 #10
svar
Avatar billede arne_v Ekspert
15. oktober 2013 - 19:32 #11
normalisering er generelt en god ting - men jeg tror ikke at det vil hjaelpe med dette problem - derimod vil det hjaelpe med problemet i tilfaelde af at nogen skifter parti mere end 2 gange
Avatar billede KKKnudsen Nybegynder
15. oktober 2013 - 19:33 #12
Hej Michael

Tak for din tid og interesse. Jeg er nysgerrig efter, hvad du mener med at normalisere.

En del af øvelsen med at lære MySQL er også at bygge databasen rigtigt ...

vh Kenneth
Avatar billede michael_stim Ekspert
16. oktober 2013 - 10:25 #13
#12

Normalisering af en database, betyder bl a at du undgår redundans af data, NULL værdier osv. Kort fortalt bryder du din data ud ved at lave flere tabeller i stedet for en stor tabel.
Avatar billede arne_v Ekspert
17. oktober 2013 - 04:07 #14
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
Computerworld tilbyder specialiserede kurser i database-management

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