Select query met group by en having

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Van Sebas

Van Sebas

08/05/2021 16:26:57
Quote Anchor link
Hallo experts,

Ik ben met een select query bezig om gegevens uit mijn database te halen alleen ik krijg maar niet de juiste informatie eruit. Ik heb een database met een date veld erin en ik heb een kolom cijfers en daarin staat dan 0, 1, 2 maar het er kan ook 100000 staan enz. (zie onderstaande afbeelding van een voorbeeld van de gegevens uit mijn database).

Afbeelding

Nu wil ik twee queries maken een die alle gegevens eruit haalt van alle jaren waarvan de cijfers bestaat uit 1 of 2 getallen, die krijg ik werkend (al weet ik niet 100% zeker of het goed is). En ik wil een query die alle gegevens eruit haal van een specifiek jaar waarvan de cijfers bestaat uit 1 of 2 getallen, en die krijg ik niet werken.

Query die alle gegevens eruit haal van elk jaar (deze laat de juiste aantallen zien)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
SELECT cijfers,
       CHAR_LENGTH(cijfers) As cijferscount,
       count(*) as aantal
FROM tabelnaam
Group by cijfers
HAVING cijferscount = 1 OR cijferscount = 2


En uiteindelijk krijg ik dan de resultaten a la de toegevoegde afbeelding hierboven (b.v. 6x komt de 0 voor, 3x in 2008 en 3x in 2009)

En dit is de query die ik er dan van gemaakt heb om de resultaten van een specifiek jaar op te halen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
SELECT YEAR(datum) As jaar,
       cijfers,
       CHAR_LENGTH(cijfers) As cijferscount,
       count(*) as aantal
FROM tabelnaam
Group by cijfers
HAVING cijferscount = 1 OR cijferscount = 2 AND jaar = "2008"



Alleen wat er nu fout gaat is dat hij aangeeft van in 2008 komt het nummer 0, 6x voor terwijl dat maar 3x is in 2008 (en ook 3x in 2009, dus totaal is het wel 6 maar ik wil alleen de aantallen van 2008 weten).

Wat doe ik fout?
 
PHP hulp

PHP hulp

28/03/2024 22:31:51
 
Adoptive Solution

Adoptive Solution

08/05/2021 19:43:09
Quote Anchor link
Ik heb er dit van gemaakt :
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
SELECT YEAR(datum) As jaar,
       cijfers,
       CHAR_LENGTH(cijfers) As cijferscount,
       count(*) as aantal
FROM getallen
GROUP BY jaar, cijfers
HAVING ( cijferscount = 1 OR cijferscount = 2 ) AND jaar = "2008";


Toevoeging op 08/05/2021 20:05:20:

PS. Een getal bestaat uit cijfers, niet andersom.
 
Van Sebas

Van Sebas

09/05/2021 10:10:52
Quote Anchor link
Top daarmee gaat het inderdaad wel goed!
Ik ga even in de group by duiken, bedankt voor de verbetering van de query.
 
Ivo P

Ivo P

11/05/2021 15:43:54
Quote Anchor link
volgens mij heb je WHERE nodig en niet HAVING:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
SELECT YEAR(datum) As jaar,
       cijfers,
--       CHAR_LENGTH(cijfers) As cijferscount,
       count(*) as aantal
FROM getallen
WHERE CHAR_LENGTH(cijfers) < 3
  AND jaar = "2008"
GROUP BY jaar, cijfers


Ik heb cijfercount ook even uitgecommenteerd: die moet anders namelijk ook in het stuk group-by staan, maar dan krijg je per cijfercount (1, 5, 32 etc) ook weer een count() bepaald.

Toevoeging op 11/05/2021 16:43:23:

aanvullend: having zou je nodig hebben als je bijvoorbeeld alleen die resultaten wilt hebben die "aantal" groter dan zeg 10 hebben:

GROUP BY jaar, cijfers
HAVING COUNT(*) > 10
Gewijzigd op 11/05/2021 15:44:33 door Ivo P
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.