[SQL] Problème avec un HAVING

WRInaute discret
Bonjour à tous !

J'ai écrit une requête pour une application VB (de gestion de foot) qui va chercher ses infos dans une base de données MySQL.
Voilà la requête qui pose problème :

SELECT COUNT(*)
FROM rencontre
WHERE NUM_CLUB_HOTE = 1
OR NUM_CLUB_VISITEUR = 1
GROUP BY JOURNEE, NUM_RENCONTRE
HAVING SCORE_HOTE IS NOT NULL
AND SCORE_VISITEUR IS NOT NULL


Le but étant de compter le nombre de matchs déjà joués dans la saison en cours pour le club n°1 (dans ce cas-ci).

Sous Access cette requête fonctionne très bien, mais sous MySQL je reçois l'erreur :
#1054 - Unknown column 'SCORE_HOTE' in 'having clause'

Rassurez vous, le champ SCORE_HOTE existe bien, mais avec le HAVING devant ça ne marche plus :? Donc soit je m'y prends mal dans ma synthaxe, soit y'a une solution plus facile qui existe (d'ailleurs je ne sais pas si le GROUP BY est indispensable dans ce cas-ci)... Je suis un peu perdu :(

NB : La table rencontre possède deux clés primaires : JOURNEE et NUM_RENCONTRE.

Merci d'avance pour votre aide ! :wink:
 
WRInaute accro
Le having sert à faire une condition sur un calcul entre plusieurs champs si mes souvenirs sont bons comme par exemple Having count(*) > 5

Mais lorsqu'il s'agit d'une condition vérifiée sur chaque champ, on utilise le where ?

Mes souvenirs ne doivent pas être très clairs

Ca marche pas sous access et mysql/php ça ?

SELECT COUNT(*)
FROM rencontre
WHERE (NUM_CLUB_HOTE = 1 OR NUM_CLUB_VISITEUR = 1)
AND SCORE_HOTE IS NOT NULL
AND SCORE_VISITEUR IS NOT NULL
GROUP BY JOURNEE, NUM_RENCONTRE

Pour moi il n'y a pas besoin de having dans ce cas, mais je me trompe peut-être ;)
 
WRInaute discret
Ca marche !
Effectivement mon idée au départ c'était d'utiliser mes NOT NULL dans mon WHERE (ce qui me semblait assez logique effectivement) mais ça me retournais un résultat faux, mais en fait j'avais oublié d'entourer mon NUM_CLUB_HOTE = 1 OR NUM_CLUB_VISITEUR = 1 avec des parenthèses... :roll:

Merci pour ton aide en tout cas ! :wink:
 
WRInaute accro
;) j'ai pourtant raté mon exam de sgbd mdr. Evidemment, si on te met 0/7 parceque tu oublies une condition, ou que tu oublies un ";"

enfin ...
 
WRInaute discret
J'ai encore besoin d'un peu d'aide :oops:
J'aimerais écrire une requête qui me permette de connaitre le nombre de matchs gagnés.

Table RENCONTRE
rencontrevn4.gif


Pour le moment je suis parti avec ces deux requêtes :
Requête 1 :
SELECT Count(*)
FROM RENCONTRE
WHERE SCORE_HOTE > SCORE_VISITEUR
AND NUM_CLUB_HOTE = 5

Requête 2 :
SELECT Count(*)
FROM RENCONTRE
WHERE SCORE_HOTE < SCORE_VISITEUR
AND NUM_CLUB_VISITEUR = 5

* le numéro du club est ici en statique mais est remplacé par une variable incrémentée dans une boucle dans mon programme

Le problème c'est que je suis obligé d'écrire deux requêtes séparées puis de les ajouter pour obtenir le nombre total de matchs remportés. Mais s'il y a une solution en une seule requête, je suis preneur :D
 
WRInaute passionné
Toi, t'as eu 0 en sgbd :)

SELECT Count(*)
FROM RENCONTRE
WHERE ((SCORE_HOTE > SCORE_VISITEUR) AND (NUM_CLUB_HOTE = 5))
OR
((SCORE_HOTE < SCORE_VISITEUR) AND (NUM_CLUB_VISITEUR = 5))
 
WRInaute discret
A peu près :lol: mais mon prof d'info y est bien pour moitié ! :roll:
J'oublie souvent d'utiliser des parenthèses dans mes WHERE apparement :?
Merci bien en tout cas :wink:
 
Discussions similaires
Haut