Avatar billede vraa Nybegynder
06. oktober 2006 - 10:53 Der er 10 kommentarer

Count problem i sql sætning

Jeg har følgende sql sætning:

select navn, adresse, count(meddelelser.brugerID) as antalMeddelelserFraBruger from bruger left join meddelelser on bruger.brugerid = meddelelser.brugerid group by navn, adresse

som giver følgende output:

Navn            Adresse                antalMeddelelserFraBruger
Hans Jensen      Torvet 5              3
Erik Eriksen    Smøgen 3              5


...MEN, jeg en kollone mere i bruger tabellen der hedder "aktiv". Hvis denne er 0 (False) skal antalMeddelelserFraBruger fra denne bruger være 0.
Så hvis Hans Jensen ikke er aktiv men godt nok har nogle meddelelser skal output være:

Navn            Adresse                antalMeddelelserFraBruger
Hans Jensen      Torvet 5              0
Erik Eriksen    Smøgen 3              5

How to do that?
Avatar billede bromer Nybegynder
06. oktober 2006 - 11:57 #1
Noget i stil med:

select
  navn, adresse, IF (bruger.aktiv <> 0) count(meddelelser.brugerID) ELSE 0 as antalMeddelelserFraBruger from bruger left join meddelelser on bruger.brugerid = meddelelser.brugerid group by navn, adresse;

Jeg kan faktisk ikke helt huske om man kan bruge IF på den måde, men jeg mener at have lavet noget i den stil. Hvis det ikke virker må du lige råbe op, så kan jeg godt lave en anden der virker.
Avatar billede arne_v Ekspert
06. oktober 2006 - 13:18 #2
Den IF skal vist være en CASE WHEN THEN ELSE END
Avatar billede vraa Nybegynder
06. oktober 2006 - 13:27 #3
følgende giver syntax fejl:
SELECT CASE COUNT(bruger.aktiv) WHEN 0 THEN 0 ELSE COUNT(meddelelser.brugerID) AS antalVentende.... osv
Avatar billede vraa Nybegynder
06. oktober 2006 - 13:30 #4
ahh... manglede end
Avatar billede vraa Nybegynder
06. oktober 2006 - 13:35 #5
Det duer bare :-)

Læg et svar så får i jeres point.
Avatar billede bromer Nybegynder
06. oktober 2006 - 16:35 #6
det skal naturligivs være en case. Så er det i postgres man kan bruge en IF :) Bare giv dem til arne_v
Avatar billede janus_007 Nybegynder
06. oktober 2006 - 19:13 #7
Uha det var da en farlig måde at lave et udtræk på.. .vha en case pga. en værdi i anden kolonne. Det betyder ikke noget ved små udtræk, men hvorfor ikke lave det på en mere standard måde?
Avatar billede arne_v Ekspert
06. oktober 2006 - 23:56 #8
som ?
Avatar billede janus_007 Nybegynder
07. oktober 2006 - 11:45 #9
eks.

select navn, adresse, count(antal) * aktiv from table....

join osv. har jeg udeladt, men idéen er til at se :-)
Avatar billede arne_v Ekspert
08. oktober 2006 - 01:24 #10
hvis aktiv<>0 betyder aktiv=1 så er det langt hurtigere
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