Toon posts:

[SQL] Actieve / non-actieve gebruikers

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik wil alle 'gebruikers' selecteren die wel rijen in 'advertenties' hebben, en ook alle 'gebruikers' die geen rijen hebben in 'advertenties'.

Deze query selecteert beide:
code:
1
2
3
SELECT g.naam, g.id, g.datum, g.email, count(advertenties.id) AS aantal FROM gebruikers AS g 
LEFT JOIN advertenties ON g.id = advertenties.gebruiker 
GROUP BY g.id ORDER BY aantal DESC



Deze query selecteert de 'gebruikers' die wel 'advertenties' hebben:
code:
1
2
3
SELECT g.naam, g.id, g.datum, g.email, count(advertenties.id) AS aantal FROM gebruikers AS g 
LEFT JOIN advertenties ON g.id = advertenties.gebruiker WHERE aantal!='0' 
GROUP BY g.id ORDER BY aantal DESC



Waarom selecteert deze query dan niet de 'gebruikers' die geen 'advertenties' hebben:
code:
1
2
3
SELECT g.naam, g.id, g.datum, g.email, count(advertenties.id) AS aantal FROM gebruikers AS g 
LEFT JOIN advertenties ON g.id = advertenties.gebruiker WHERE aantal='0' 
GROUP BY g.id ORDER BY aantal DESC

  • whoami
  • Registratie: December 2000
  • Laatst online: 20:31
Om het aantal gebruikers te tellen die geen advertenties hebben, zul je moeten gebruik maken van een subquery.

code:
1
2
3
select ....
from ....
where gebruikerid not in ( select ..... )

https://fgheysels.github.io/


Verwijderd

Je kan bij de onderste beter een HAVING count(advertenties.id) = 0 doen
Having komt onder de GROUP BY
[edit]
ipv de where dan ...

[ Voor 13% gewijzigd door Verwijderd op 18-04-2003 14:51 ]


Verwijderd

Topicstarter
Ik heb even ErikvSons oplossing geprobeert, en jawel het werkt :D Bedankt. MAar toch raar dat mijn eigen manier niet werkt ;s

  • whoami
  • Registratie: December 2000
  • Laatst online: 20:31
Verwijderd schreef op 18 April 2003 @ 14:52:
Ik heb even ErikvSons oplossing geprobeert, en jawel het werkt :D Bedankt. MAar toch raar dat mijn eigen manier niet werkt ;s
Nee hoor. Bij de where is het resultaat van de count nog niet gekend.
Als je wilt filteren op aggregated columns, moet je dat in de having clause doen.

https://fgheysels.github.io/


  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

Bovendien vergelijk je aantal ook nog eens met de string '0'
Het is verwonderlijk dat je geen unknown column name krijgt. Ik neem aan dat aantal niet ook een column in je table is.

  • Creepy
  • Registratie: Juni 2001
  • Nu online

Creepy

Tactical Espionage Splatterer

Goodielover schreef op 18 april 2003 @ 23:39:
Het is verwonderlijk dat je geen unknown column name krijgt. Ik neem aan dat aantal niet ook een column in je table is.
In de query staat "select bla bla bla as aantal". Ook deze alias kan je gewoon in je where clause gebruiken, dus een foutmelding zul je hier niet mee krijgen. Dat het resultaat van aantal pas later bekend is maakt in dit geval niet uit.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

OK dan een andere fout melding:
cannot use aggregate column in where clause (zoals whoami ook al aangaf)
Pagina: 1