ACCESS > select count group by + jointure
Résolu
xdiz
Messages postés
108
Date d'inscription
Statut
Membre
Dernière intervention
-
CaPiT Messages postés 609 Date d'inscription Statut Membre Dernière intervention -
CaPiT Messages postés 609 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
A l'aide de ce post http://www.commentcamarche.net/forum/affich 5138406 sql select count distinct group by access
dont je me suis aidé, j'ai reussi à faire ma requête cependant il faudrait une jointure en plus ....
id_perso est la clef primaire de la table dev_perso et la clef étrangère (sans integrité referencielle) de la table dev_devis
Je cherche à compter le nombre de personne en fonction des regions sur une periode donnée (date_creation). Cet attribut est dans une autre table : dev_devis. J'ai essayé de faire ceci (jointure + condition), mais sa me donne des resultats foireux !
Je fais trop compliquer ? Y'a-t-il plus simple, je galère depuis 1j, je n'y vois plus clair :/
Merci d'avoir lu ;)
A l'aide de ce post http://www.commentcamarche.net/forum/affich 5138406 sql select count distinct group by access
dont je me suis aidé, j'ai reussi à faire ma requête cependant il faudrait une jointure en plus ....
SELECT Count(dev_perso.id_perso) AS id_perso_monde, dev_perso.region FROM (select distinct * from dev_perso) WHERE dev_perso.region <> 'monde' GROUP BY dev_perso.region
id_perso_monde region 2 Montpellier 1 Nancy-Metz 1 Paris
id_perso est la clef primaire de la table dev_perso et la clef étrangère (sans integrité referencielle) de la table dev_devis
Je cherche à compter le nombre de personne en fonction des regions sur une periode donnée (date_creation). Cet attribut est dans une autre table : dev_devis. J'ai essayé de faire ceci (jointure + condition), mais sa me donne des resultats foireux !
SELECT Count(dev_perso.id_perso) AS id_perso_monde, dev_perso.region FROM (select distinct * from dev_perso), dev_devis WHERE dev_perso.region <> 'monde' AND (dev_devis.date_creation) BETWEEN #01/01/2008# And #31/12/2008# GROUP BY dev_perso.region
Je fais trop compliquer ? Y'a-t-il plus simple, je galère depuis 1j, je n'y vois plus clair :/
Merci d'avoir lu ;)
26 réponses
Trouvééé !! ^^
1ere requête:
2eme requête:
1ere requête:
SELECT DISTINCT dev_devis.id_perso FROM dev_devis;
2eme requête:
SELECT dev_perso.region, Count(req1.id_perso) AS Compte_id_perso FROM dev_perso INNER JOIN req1 ON dev_perso.id_perso = req1.id_perso GROUP BY dev_perso.region;
Sinon c'est peut-être la jointure qui ne fonctionne pas (ce qui m'étonnerais).
Mais bon, le message d'erreur à l'air de signifier que c'est le FROM qui foire.
Remplace tout de même:
par:
Mais bon, le message d'erreur à l'air de signifier que c'est le FROM qui foire.
Remplace tout de même:
FROM dev_perso INNER JOIN $req1 ON dev_perso.id_perso = $req1.id_perso
par:
FROM dev_perso, $req1 WHERE dev_perso.id_perso = $req1.id_perso
On a eu la même idée :d
Tres bon tuto : https://access.developpez.com/sql/#L1.2.1
J'ai tout rassemblé dans une seule requête, aucune erreur d'execution, toutes les regions ont le mêmes nombre de personne ce qui est FAUX, problème dans ma boucle : peut etre ! Problème dans la requête : probable ...
Tres bon tuto : https://access.developpez.com/sql/#L1.2.1
SELECT DISTINCTROW dev_perso.region, Count(dev_devis.id_perso) AS nbr_perso_academie FROM dev_devis, dev_perso WHERE dev_devis.id_perso = dev_perso.id_perso AND (dev_devis.date_creation) BETWEEN #$dateDeb# And #$dateFin# AND dev_perso.region <> 'monde' GROUP BY dev_perso.region
J'ai tout rassemblé dans une seule requête, aucune erreur d'execution, toutes les regions ont le mêmes nombre de personne ce qui est FAUX, problème dans ma boucle : peut etre ! Problème dans la requête : probable ...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
J'ai testé avec 2 requête, cela ne marchait pas bien (erreur dans la clause FROM) :/
J'ai mis la jointure dans le WHERE et ajouté les conditions ...
Il me met des 6 partout (6 qui correspont au nombre de devis regroupé par region pour celle de montpellier) alors que je devrais avoir ça
DISTINCTROW ne fonctionne que si la requête porte sur au moins deux tables et qu'une seule est concernée dans la projection.
J'ai mis la jointure dans le WHERE et ajouté les conditions ...
Il me met des 6 partout (6 qui correspont au nombre de devis regroupé par region pour celle de montpellier) alors que je devrais avoir ça
nbr_perso_academie region 2 Montpellier 1 Nancy-Metz 1 Paris
$query_devis_academie = "SELECT dev_perso.region, Count(dev_devis.id_devis) AS nbr_devis_academie FROM dev_devis INNER JOIN dev_perso ON dev_devis.id_perso = dev_perso.id_perso WHERE (dev_devis.date_creation) BETWEEN #$dateDeb# And #$dateFin# AND dev_perso.region <> 'monde' GROUP BY dev_perso.region; "; $result_devis_academie = odbc_exec($cnx, $query_devis_academie); $query_perso_academie = "SELECT DISTINCTROW Count(dev_devis.id_perso) AS nbr_perso_academie, dev_perso.region FROM dev_devis, dev_perso WHERE dev_devis.id_perso = dev_perso.id_perso AND (dev_devis.date_creation) BETWEEN #$dateDeb# And #$dateFin# AND dev_perso.region <> 'monde' GROUP BY dev_perso.region"; $result_perso_academie = odbc_exec($cnx, $query_perso_academie); while (odbc_fetch_row($result_perso_academie)) { while (odbc_fetch_row($result_devis_academie)) { $region = odbc_result($result_devis_academie, 'region'); $nbr_devis = odbc_result($result_devis_academie, 'nbr_devis_academie'); $nbr_perso = odbc_result($result_perso_academie, 'nbr_perso_academie'); ?> <tr> <td><?php echo $region; ?></td> <td><?php echo $nbr_perso; ?></td> <td><?php echo $nbr_devis; ?></td> </tr> <?php }
Voila tu as tout ;)
C'est bon TROUVER :
J'ai fait une sous requête dans le where ;)
TAG: distinct count group by sous requête select where in
J'ai fait une sous requête dans le where ;)
$req1 = "SELECT DISTINCT dev_devis.id_perso FROM dev_devis WHERE (dev_devis.date_creation) BETWEEN #$dateDeb# And #$dateFin#"; $query_perso_academie = " SELECT Count(dev_perso.id_perso) AS nbr_perso_academie, dev_perso.region FROM dev_perso WHERE dev_perso.id_perso IN ($req1) AND dev_perso.region <> 'monde' GROUP BY dev_perso.region ";
TAG: distinct count group by sous requête select where in
Bonjour,
il n'y a aucune jointure dans tes requêtes??
Une jointure c'est:
- Soit après le FROM
INNER JOIN [Table1] ON[Table2].[Champs2]= [Table1].[Champs1]
- Soit dans le WHERE:
[Table2].[Champs2]= [Table1].[Champs1]
il n'y a aucune jointure dans tes requêtes??
Une jointure c'est:
- Soit après le FROM
INNER JOIN [Table1] ON[Table2].[Champs2]= [Table1].[Champs1]
- Soit dans le WHERE:
[Table2].[Champs2]= [Table1].[Champs1]
Salut,
J'ai essayé ceci:
Le resultat est vraiment a coté de la plaque :/
J'ai essayé ceci:
SELECT Count(dev_perso.id_perso) AS id_perso_monde, dev_perso.region FROM dev_devis INNER JOIN dev_perso ON dev_devis.id_perso = dev_perso.id_perso, (SELECT DISTINCT * FROM dev_perso) WHERE dev_perso.region <> 'monde' AND (dev_devis.date_creation) BETWEEN #01/01/2008# And #31/12/2008# GROUP BY dev_perso.region
id_perso_monde region 42 Montpellier 7 Nancy-Metz 28 Paris
Le resultat est vraiment a coté de la plaque :/
Je comprends pas ton SELECT DISTINCT(...), que fait t'il là ? Fais:
SELECT Count(dev_perso.id_perso) AS id_perso_monde, dev_devis .region, dev_perso.* FROM dev_devis INNER JOIN dev_perso ON dev_devis.id_perso = dev_perso.id_perso WHERE dev_perso.region <> 'monde' AND (dev_devis.date_creation) BETWEEN #01/01/2008# And #31/12/2008# GROUP BY dev_perso.region
Il permet d'enlever les doublons liés au id_perso...
Chaque personne enregistrée peut créer autant de devis quelle veut, chaque devis correspond à une personne. Cependant une personne non enregistrée peut créer un devis son id_perso sera donc null
Je souhaite savoir le nombre de personne ayant créer un/des devis regroupée par region... sachant que dans une même region, plusieurs personne existent ... normal :)
Je dois trouver ce resultat
Mais avec une jointure et une selection supplémentaire :)
Je viens de tester ta requete et voici le resultat
Il me retourne le nombre de devis crée regourpé par région et non pas le nombre de personne regoupé par région :/
Chaque personne enregistrée peut créer autant de devis quelle veut, chaque devis correspond à une personne. Cependant une personne non enregistrée peut créer un devis son id_perso sera donc null
Je souhaite savoir le nombre de personne ayant créer un/des devis regroupée par region... sachant que dans une même region, plusieurs personne existent ... normal :)
Je dois trouver ce resultat
id_perso_monde region 2 Montpellier 1 Nancy-Metz 1 Paris
Mais avec une jointure et une selection supplémentaire :)
Je viens de tester ta requete et voici le resultat
id_perso_monde region 6 Montpellier 1 Nancy-Metz 4 Paris
Il me retourne le nombre de devis crée regourpé par région et non pas le nombre de personne regoupé par région :/
Avec un GROUP BY dev_perso.region HAVING COUNT dev_perso.id_perso où un truc dans le genre sa pourrait marcher ??