ACCESS > select count group by + jointure
Résolu/Fermé
xdiz
Messages postés
108
Date d'inscription
jeudi 3 janvier 2008
Statut
Membre
Dernière intervention
19 décembre 2012
-
8 août 2008 à 01:03
CaPiT Messages postés 609 Date d'inscription lundi 7 janvier 2008 Statut Membre Dernière intervention 21 avril 2010 - 11 août 2008 à 17:04
CaPiT Messages postés 609 Date d'inscription lundi 7 janvier 2008 Statut Membre Dernière intervention 21 avril 2010 - 11 août 2008 à 17:04
A voir également:
- Access group by
- Gd group prélèvement - Forum Vos droits sur internet
- Access runtime ✓ - Forum Access
- To be filled by o.e.m - Forum Windows
- Acer quick access - Forum Logiciels
- Group whatsapp - Guide
26 réponses
CaPiT
Messages postés
609
Date d'inscription
lundi 7 janvier 2008
Statut
Membre
Dernière intervention
21 avril 2010
51
8 août 2008 à 17:18
8 août 2008 à 17:18
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;
CaPiT
Messages postés
609
Date d'inscription
lundi 7 janvier 2008
Statut
Membre
Dernière intervention
21 avril 2010
51
11 août 2008 à 09:32
11 août 2008 à 09:32
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
xdiz
Messages postés
108
Date d'inscription
jeudi 3 janvier 2008
Statut
Membre
Dernière intervention
19 décembre 2012
41
11 août 2008 à 10:31
11 août 2008 à 10:31
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 ...
CaPiT
Messages postés
609
Date d'inscription
lundi 7 janvier 2008
Statut
Membre
Dernière intervention
21 avril 2010
51
11 août 2008 à 10:44
11 août 2008 à 10:44
Bah, tu as enlever la requête 1 là?
Je la vois pas dans ta requête qui englobe le tout.
Je la vois pas dans ta requête qui englobe le tout.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
xdiz
Messages postés
108
Date d'inscription
jeudi 3 janvier 2008
Statut
Membre
Dernière intervention
19 décembre 2012
41
11 août 2008 à 11:07
11 août 2008 à 11:07
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
CaPiT
Messages postés
609
Date d'inscription
lundi 7 janvier 2008
Statut
Membre
Dernière intervention
21 avril 2010
51
11 août 2008 à 11:10
11 août 2008 à 11:10
S'il affiche des 6 partout c'est que la requête n'est plus bonne.
Peux tu me la montrer?
Peux tu me la montrer?
xdiz
Messages postés
108
Date d'inscription
jeudi 3 janvier 2008
Statut
Membre
Dernière intervention
19 décembre 2012
41
11 août 2008 à 11:39
11 août 2008 à 11:39
$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 ;)
xdiz
Messages postés
108
Date d'inscription
jeudi 3 janvier 2008
Statut
Membre
Dernière intervention
19 décembre 2012
41
11 août 2008 à 16:00
11 août 2008 à 16:00
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
CaPiT
Messages postés
609
Date d'inscription
lundi 7 janvier 2008
Statut
Membre
Dernière intervention
21 avril 2010
51
11 août 2008 à 17:04
11 août 2008 à 17:04
Super ça ;)
Bien joué. Bonne journée !
Bien joué. Bonne journée !
CaPiT
Messages postés
609
Date d'inscription
lundi 7 janvier 2008
Statut
Membre
Dernière intervention
21 avril 2010
51
8 août 2008 à 09:10
8 août 2008 à 09:10
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]
xdiz
Messages postés
108
Date d'inscription
jeudi 3 janvier 2008
Statut
Membre
Dernière intervention
19 décembre 2012
41
8 août 2008 à 13:48
8 août 2008 à 13:48
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 :/
CaPiT
Messages postés
609
Date d'inscription
lundi 7 janvier 2008
Statut
Membre
Dernière intervention
21 avril 2010
51
8 août 2008 à 14:11
8 août 2008 à 14:11
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
xdiz
Messages postés
108
Date d'inscription
jeudi 3 janvier 2008
Statut
Membre
Dernière intervention
19 décembre 2012
41
8 août 2008 à 14:19
8 août 2008 à 14:19
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 :/
CaPiT
Messages postés
609
Date d'inscription
lundi 7 janvier 2008
Statut
Membre
Dernière intervention
21 avril 2010
51
8 août 2008 à 14:26
8 août 2008 à 14:26
Et si tu rajoutes un DISTINCT au début?
xdiz
Messages postés
108
Date d'inscription
jeudi 3 janvier 2008
Statut
Membre
Dernière intervention
19 décembre 2012
41
8 août 2008 à 14:39
8 août 2008 à 14:39
C'est pareil mais pas dans le même ordre alaphabétique ...
xdiz
Messages postés
108
Date d'inscription
jeudi 3 janvier 2008
Statut
Membre
Dernière intervention
19 décembre 2012
41
8 août 2008 à 14:47
8 août 2008 à 14:47
Avec un GROUP BY dev_perso.region HAVING COUNT dev_perso.id_perso où un truc dans le genre sa pourrait marcher ??
CaPiT
Messages postés
609
Date d'inscription
lundi 7 janvier 2008
Statut
Membre
Dernière intervention
21 avril 2010
51
8 août 2008 à 15:00
8 août 2008 à 15:00
Héhé, ouais c'est surement possible.
Au pire tu m'envoie ta base et je te fais ça ;)
Tu la mets sur http://cijoint.fr et tu me donne le lien.
Au pire tu m'envoie ta base et je te fais ça ;)
Tu la mets sur http://cijoint.fr et tu me donne le lien.
xdiz
Messages postés
108
Date d'inscription
jeudi 3 janvier 2008
Statut
Membre
Dernière intervention
19 décembre 2012
41
8 août 2008 à 15:30
8 août 2008 à 15:30
re, je viens de te laisser un message en private ;)
xdiz
Messages postés
108
Date d'inscription
jeudi 3 janvier 2008
Statut
Membre
Dernière intervention
19 décembre 2012
41
8 août 2008 à 17:22
8 août 2008 à 17:22
Héhéhé parfait ... mais la requête 2 c'est quoi ?
CaPiT
Messages postés
609
Date d'inscription
lundi 7 janvier 2008
Statut
Membre
Dernière intervention
21 avril 2010
51
8 août 2008 à 17:26
8 août 2008 à 17:26
J'ai éditer mon post plus haut, j'avais foiré ;)
xdiz
Messages postés
108
Date d'inscription
jeudi 3 janvier 2008
Statut
Membre
Dernière intervention
19 décembre 2012
41
8 août 2008 à 17:32
8 août 2008 à 17:32
EDIT: Merci pour cette requête mais elle ne fait pas ce que je souhaite : la condition date_creation n'y est pas
Lorsque je l'insère, ça me donne des resultats foireux comme précédement :/
WHERE dev_devis.date_creation BETWEEN #01/01/2008# And #31/12/2008#
Lorsque je l'insère, ça me donne des resultats foireux comme précédement :/
CaPiT
Messages postés
609
Date d'inscription
lundi 7 janvier 2008
Statut
Membre
Dernière intervention
21 avril 2010
51
11 août 2008 à 08:27
11 août 2008 à 08:27
Bonjour,
as tu réussi à résoudre ton problème (je n'étais pas là du week end).
as tu réussi à résoudre ton problème (je n'étais pas là du week end).