Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Requêtes et SQL.
Requêtes et SQL. Tout ce qui concerne vos questions sur les requêtes et le SQL sous Access se trouve ici.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/03/2011, 18h37   #1
Membre à l'essai
 
Inscription : janvier 2011
Messages : 143
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 143
Points : 24
Points : 24
Par défaut probleme fonction imbriqué MAX COUNT

Bonsoir

Ma requête ne marche pas . Je veux l'année ou il y a le plus de concours. Chaque concours possède un code (code_c)

Code sql :
1
2
3
4
5
SELECT YEAR(date_c) >> ( renvoi l'année ou il y a le plus de concours )
FROM CONCOURS >> (vient de la table concours )
WHERE YEAR(date_c)  >> ( je demande au systeme de reconnaitre la partie année de ma date du type : mm/jj/aa ) 
GROUP BY YEAR(date_c)  >> ( je groupe par année )
HAVING MAX (COUNT ( code_c)) ; >> ( je recherche l'année ou il y a le plus de concours ) 

Le compilateur dit que c'est interdit d'avoir une fonction d'agregat MAX ( COUNT ( code_c ) )

Merci d'avance
tanaka59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2011, 19h42   #2
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 805
Points : 2 805
Bonjour Tanaka59,

J'ai envie de dire, gentiment : "on se calme !..."

Code sql :
1
2
SELECT YEAR(date_c)
>> ( renvoi l'année ou il y a le plus de concours )
==> Non : renvoie une année, simplement. En effet, tu n'as pas demandé à Access de compter (pour l'instant).


Code sql :
1
2
FROM CONCOURS
>> (vient de la TABLE concours )
==> Oui.


Code sql :
1
2
3
WHERE YEAR(date_c)
>> ( je demande au systeme de reconnaitre la partie année de ma date du type :
mm/jj/aa )
==> Non, tu ne demande rien au système (Where... quoi ?). Coluche, dans un de ces sketches, demandait : "quel âge avait Rimbaud ?"... C'est le même style de critère que tu demandes à Access.


Code sql :
1
2
GROUP BY YEAR(date_c)
>> ( je groupe par année )
==> Oui.


Code sql :
1
2
HAVING MAX (COUNT ( code_c)) ;
>> ( je recherche l'année ou il y a le plus de concours )
==> Comme tu y vas !... Non. Là, tu as demandé à Acces de compter, mais le HAVING teste un critère après groupage, mais ne compte pas. C'est dans le SELECT qu'il faut indiquer le count(*).


En résumé, Access doit d'abord compter les concours de toutes les années pour savoir quelle(s) est (sont) l'année (les années) qui a (ont) comporté le plus de concours. Il va donc falloir passer par 3 requêtes :

Requête R1 :
- ajouter la table CONCOURS (FROM) ;
- passer en regroupement (GROUP BY) ;
- sélectionner Ann:Année(date_c), Nbr:count(*) (en Expression) (SELECT).
==> te donne la liste des années avec le nombre de concours qu'elles continnenent.

Requête R2 :
- ajouter la requête R1 (FROM) ;
- passer en regroupement (GROUP BY) ;
- sélectionner Max:max(Nbr) (en Expression) (SELECT).
==> te donne le nombre maximum de concours (nous de connaissons pas l'année, pour l'instant).

Requête R3 :
- ajouter la requête R2 (FROM) ;
- ajouter la requête R1 (FROM) ;
- lier R2 à R1 via Max => Nbr (JOIN) ;
- sélectionner R1.Ann, R2.Max (SELECT).
==> te donne liste des années contenant le maximum de concours.

Ouf... à tester.
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 01/03/2011, 21h10   #3
Membre à l'essai
 
Inscription : janvier 2011
Messages : 143
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 143
Points : 24
Points : 24
Bonsoir

J'ai fait le test en imbriqué , ca ne marche pas .

J'ai tenté ceci :

Code sql :
1
2
3
4
5
SELECT TOP 1 COUNT ( DATEPART("yyyy" ,date_c) )
FROM CONCOURS 
GROUP BY  DATEPART("yyyy" ,date_c)
HAVING COUNT ( code_c)  
ORDER BY ( DATEPART("yyyy" ,date_c) ) DESC ;

Un trés grand merci d'avance
tanaka59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2011, 21h19   #4
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 805
Points : 2 805
Heu... tu as lu mon post ?...
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h50.


 
 
 
 
Partenaires

Hébergement Web