Toon posts:

[MySQL] simpele count met group by

Pagina: 1
Acties:

Verwijderd

Topicstarter
Als resultaat uit mijn msql query wil ik graag 1 row krijgen die het aantal affected rows weergeeft.

Dit kan natuurlijk met de COUNT functie, maar wanneer ik dat combineer met GROUP BY dat geeft de COUNT(*) functie niet meer de de som van de rijen maar de som per rij waarop gegroepeerd is. En dat wil ik niet.
Wie kent dit probleem (en miss een oplossing)?

Voorbeeld:
SELECT COUNT(*) FROM landen => 24 (prima)
SELECT COUNT(*) FROM landen GROUP BY taal => meerdere rijen met een count per rij (niet zo prima)

  • disjfa
  • Registratie: April 2001
  • Laatst online: 08-01 11:17

disjfa

be

Ik zie je probleem niet. Wat je zegt is precies de manier waarop het werkt. Gewoon geen group by gebruiken.

Waarschijnlijk zoek je naar distinct.
SQL:
1
SELECT COUNT(DISTINCT taal) FROM landen;

disjfa - disj·fa (meneer)
disjfa.nl


  • pjonk
  • Registratie: November 2000
  • Laatst online: 29-12-2025
Ik weet dat je in MS-SQL @@ROWCOUNT kunt gebruiken. Nu weet ik niet of MySQL dit ondersteunt, maar blijkbaar zijn er wel meer mensen met deze vraag:
http://forums.mysql.com/read.php?60,45239,45239

Edit:
Een DISTINCT kan hier idd ook van dienst zijn.

[ Voor 12% gewijzigd door pjonk op 13-09-2006 13:25 ]

It’s nice to be important but it’s more important to be nice


  • Blacksnak
  • Registratie: Oktober 2001
  • Laatst online: 07-07-2024
disjfa schreef op woensdag 13 september 2006 @ 13:24:
Ik zie je probleem niet. Wat je zegt is precies de manier waarop het werkt. Gewoon geen group by gebruiken.
TS wil, zijn voorbeeld volgend, achter iedere rij 24 hebben staan ipv totalen per taal(in zijn geval). Allesinds, zo begrijp ik het.

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Eigenlijk wil TS dus een gegeven dat op de gehele resultset slaat, in elke rij frotten. Klinkt conceptueel niet helemaal lekker. ;)

{signature}


Verwijderd

Topicstarter
Ik weet dat het voorbeeld opgelost kan worden met DISTINCT, maar ik heb een query waarin ik ook GROUP BY wil gebruiken, en die zorgt ervoor dat er meerdere rijen worden uitgevoerd. Ik wil het in 1 rij terug hebben met een opsomming van het aantal rijen.

Voorbeeld:
SELECT COUNT(*) FROM landen GROUP BY taal
Resulteerd in 4 rijen met een aantal per rij. Ik wil in dat geval 1 rij met de waarde 4 terug hebben en in de query moet een GROUP BY zitten(voor een andere reden). Kan dit?

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Verwijderd schreef op woensdag 13 september 2006 @ 13:32:
Voorbeeld:
SELECT COUNT(*) FROM landen GROUP BY taal
Resulteerd in 4 rijen met een aantal per rij. Ik wil in dat geval 1 rij met de waarde 4 terug hebben en in de query moet een GROUP BY zitten(voor een andere reden). Kan dit?.
Even 1 stapje terug: wat is het doel van de query? Je moet zeggen waarom je per se group by wil doen.
Nu klinkt het alsof je per group by een bonus krijgt en voor elke extra query salaris moet inleveren. ;)

{signature}


Verwijderd

Topicstarter
Ok weg met het voorbeeld.
Dit is de praktijk:

SELECT COUNT(*) as 'aantal' FROM accomodaties LEFT JOIN recensieacco ON recensieacco.accoId = accomodaties.id GROUP BY accomodaties.id HAVING ROUND(SUM(indruk)/COUNT(indruk >0 OR NULL)*2)/2 >= 4

Als resultaat wil ik alleen een opsomming van de rijen die aan deze voorwaarden voldoen.

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Welke MySQL versie? Anders kun je het het eenvoudigst oplossen met een subquery:

SQL:
1
2
SELECT COUNT(*) as Resultaat FROM 
(SELECT bla, COUNT(*) FROM Landen GROUP BY bla)A

Oops! Google Chrome could not find www.rijks%20museum.nl


  • Wilfred
  • Registratie: Januari 2000
  • Laatst online: 22-08-2022
Maak allereerst een view V_AANTAL_LANDEN met select count (*) from landen..
Vervolgens maak je een view met de select en group..
Vervolgens maak je een query van deze twee. views zodat ze gecombineerd worden..

of
code:
1
2
3
SELECT (select count (*) from landen) AS aantallanden, Landen.Land, Landen.Taal
FROM Landen
GROUP BY Landen.Land, Landen.Taal;

[ Voor 26% gewijzigd door Wilfred op 13-09-2006 13:59 ]

Sign of my Time


Verwijderd

Topicstarter
P_de_B schreef op woensdag 13 september 2006 @ 13:48:
Welke MySQL versie? Anders kun je het het eenvoudigst oplossen met een subquery:

SQL:
1
2
SELECT COUNT(*) as Resultaat FROM 
(SELECT bla, COUNT(*) FROM Landen GROUP BY bla)A
Danku. De subquery loste het probleem op. (mijn eerste keer met sub querys :X ) handig!
Pagina: 1