GROUP BY ou pas GROUP BY
Fermé
amoi
-
26 févr. 2010 à 13:28
0z0z Messages postés 108 Date d'inscription mardi 9 février 2010 Statut Membre Dernière intervention 18 mai 2010 - 1 mars 2010 à 10:16
0z0z Messages postés 108 Date d'inscription mardi 9 février 2010 Statut Membre Dernière intervention 18 mai 2010 - 1 mars 2010 à 10:16
A voir également:
- GROUP BY ou pas GROUP BY
- Home by me - Télécharger - 3D
- Zen by deezer - Télécharger - Santé & Bien-être
- Moa by bva avis ✓ - Forum Vos droits sur internet
- Gd group prélèvement - Forum Vos droits sur internet
- The hut group colis - Forum Jeux vidéo
14 réponses
0z0z
Messages postés
108
Date d'inscription
mardi 9 février 2010
Statut
Membre
Dernière intervention
18 mai 2010
5
26 févr. 2010 à 14:43
26 févr. 2010 à 14:43
As-tu testé la requête SELECT * FROM vue GROUP BY nom; ?
Je ne pense pas que cette requête soit bonne...
Je ne pense pas que cette requête soit bonne...
0z0z
Messages postés
108
Date d'inscription
mardi 9 février 2010
Statut
Membre
Dernière intervention
18 mai 2010
5
26 févr. 2010 à 15:00
26 févr. 2010 à 15:00
Peux-tu me dire ce qu'elle te renvoi ?
elle me renvoye
toto ¦ 3456¦ 0 ¦1970-12-07
amoi ¦ 3472¦ 0 ¦1960-12-13
donc par deduction la premiere entrée du nom qu'elle trouve et qu'elle place dans une table temporaire...mais je ne suis pas sur de ca
toto ¦ 3456¦ 0 ¦1970-12-07
amoi ¦ 3472¦ 0 ¦1960-12-13
donc par deduction la premiere entrée du nom qu'elle trouve et qu'elle place dans une table temporaire...mais je ne suis pas sur de ca
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
0z0z
Messages postés
108
Date d'inscription
mardi 9 février 2010
Statut
Membre
Dernière intervention
18 mai 2010
5
26 févr. 2010 à 15:28
26 févr. 2010 à 15:28
Je ne serais pas répondre à ta question dans ces cas là.
Cependant tu sais qu'un GROUP BY sert à regrouper des données. Donc dans ta requête il faut qu'il y ai une logique pour regrouper les données. Et dans ces cas la je pense qu'un GROUP BY avec SELECT * ca n'est pas correct.
Je me trompe peut être ceci dit. Je ne donne que mon avis.
Cependant tu sais qu'un GROUP BY sert à regrouper des données. Donc dans ta requête il faut qu'il y ai une logique pour regrouper les données. Et dans ces cas la je pense qu'un GROUP BY avec SELECT * ca n'est pas correct.
Je me trompe peut être ceci dit. Je ne donne que mon avis.
ce n'est pas uniquement les informations de la colonne nom qui m'interresse....c'est tous les champs des entrée qui sont retenu pas le GROUP BY.....car je les utilise tous plus tard dans une page...c'est une sorte de Select dans un select
0z0z
Messages postés
108
Date d'inscription
mardi 9 février 2010
Statut
Membre
Dernière intervention
18 mai 2010
5
26 févr. 2010 à 15:50
26 févr. 2010 à 15:50
Dans la requête là tu n'as mit que le champ 'nom' dans le GROUP BY.
Il faut que tu y mettes tous les champs qui t'intéressent.
Il faut que tu y mettes tous les champs qui t'intéressent.
garion28
Messages postés
1543
Date d'inscription
mardi 16 juin 2009
Statut
Membre
Dernière intervention
3 avril 2011
404
26 févr. 2010 à 15:58
26 févr. 2010 à 15:58
comme dis plus haut le group by sert a regrouper les données, c'est a dire a enlever les doublons, dans ton jeu d'enregistrement il n'y as aucune ligne en doublon, donc ca ne sert a rien
le meilleur cas ou tu serai amené a utiliser le group by c'est si tu utilisai une fonction d'agrégat (comme par exemple un cout(*)) associé a des nom de champs (et pas un *), dans ce cas au lieu de voir toutes les lignes avec doublon avec le nombre total de ligne, tu vérai les lignes sans doublon associé au nombre de lignes des doublons rencontré
j'espère m'être bien fait comprendre
le meilleur cas ou tu serai amené a utiliser le group by c'est si tu utilisai une fonction d'agrégat (comme par exemple un cout(*)) associé a des nom de champs (et pas un *), dans ce cas au lieu de voir toutes les lignes avec doublon avec le nombre total de ligne, tu vérai les lignes sans doublon associé au nombre de lignes des doublons rencontré
j'espère m'être bien fait comprendre
0z0z
Messages postés
108
Date d'inscription
mardi 9 février 2010
Statut
Membre
Dernière intervention
18 mai 2010
5
26 févr. 2010 à 16:05
26 févr. 2010 à 16:05
Merci garion28 c'est exactement là où je voulais en venir.
garion28
Messages postés
1543
Date d'inscription
mardi 16 juin 2009
Statut
Membre
Dernière intervention
3 avril 2011
404
26 févr. 2010 à 16:06
26 févr. 2010 à 16:06
si tu es amené a utiliser un group by lorsque tu fait un select * c'est que ta base est mal faite puisque la clé primaire ne peut pas etre en double
oki oki...j'apprends a grand pas avec vous les gars ...cool merci
alors pour moi le * dans le SELEC servait a dire de renvoyer tout les champs au lieu de juste les champs nommé...mais apparament c'est faux
le GROUP BY effectivement me sert a regrouper des données mais dans une seule colonne...c'est apparement pas la bonne comprehension
cependant, j'applique le GROUP BY sur une vue qui ne contient pas le champ "Clef primaire" de l'une des deux tables..est ce cela aussi??
Bref je vais poser ma question different du coup...je modifie un peu les tables et je vais essayé de m'appuyer sur l'exemple shematique pour coller a mes besoins reels, pui je vous detaille ma question.
Table 1
idj ¦ nom
98 ¦ toto
105 ¦amoi
Table 2
ida ¦ idj ¦ content
1 ¦ 98 ¦ avion
2 ¦105 ¦ bateau
3 ¦105 ¦ white
4 ¦98 ¦ carott
Table3
idp ¦ ida ¦ num ¦ state ¦ date
1 ¦1 ¦ 3456¦ 0 ¦1970-12-07
2 ¦1 ¦ 8492¦ 1 ¦1580-09-30
3 ¦2 ¦ 3472¦ 0 ¦1960-12-13
4 ¦2 ¦ 684 ¦ 1 ¦1982-05-22
Je fais une vue avec :Idj, nom, content, num, state, date
ce que je connais est le champ idj
ce que j'ai besoin d'obtenir est une table avec, pour chaque valeur du champ "content" d'un "idj" donné, la dernier entrée dans la table 3 en fonction de date,
bref de la vue je souhaite obtenir une table contenant ca
98 ¦toto ¦avion ¦ 3456¦ 0 ¦1970-12-07
98 ¦toto ¦carott ¦ 3456¦ 0 ¦1970-12-07
j'espere ma requete plus claire, merci
alors pour moi le * dans le SELEC servait a dire de renvoyer tout les champs au lieu de juste les champs nommé...mais apparament c'est faux
le GROUP BY effectivement me sert a regrouper des données mais dans une seule colonne...c'est apparement pas la bonne comprehension
cependant, j'applique le GROUP BY sur une vue qui ne contient pas le champ "Clef primaire" de l'une des deux tables..est ce cela aussi??
Bref je vais poser ma question different du coup...je modifie un peu les tables et je vais essayé de m'appuyer sur l'exemple shematique pour coller a mes besoins reels, pui je vous detaille ma question.
Table 1
idj ¦ nom
98 ¦ toto
105 ¦amoi
Table 2
ida ¦ idj ¦ content
1 ¦ 98 ¦ avion
2 ¦105 ¦ bateau
3 ¦105 ¦ white
4 ¦98 ¦ carott
Table3
idp ¦ ida ¦ num ¦ state ¦ date
1 ¦1 ¦ 3456¦ 0 ¦1970-12-07
2 ¦1 ¦ 8492¦ 1 ¦1580-09-30
3 ¦2 ¦ 3472¦ 0 ¦1960-12-13
4 ¦2 ¦ 684 ¦ 1 ¦1982-05-22
Je fais une vue avec :Idj, nom, content, num, state, date
ce que je connais est le champ idj
ce que j'ai besoin d'obtenir est une table avec, pour chaque valeur du champ "content" d'un "idj" donné, la dernier entrée dans la table 3 en fonction de date,
bref de la vue je souhaite obtenir une table contenant ca
98 ¦toto ¦avion ¦ 3456¦ 0 ¦1970-12-07
98 ¦toto ¦carott ¦ 3456¦ 0 ¦1970-12-07
j'espere ma requete plus claire, merci
avec un exemple plus parlant...
voici la requete sur une vue qui trie les infos
SELECT *
FROM `v_pap_order`
WHERE `id_player` =98;
le resultat donne
300 4 119 7 2009-04-24 680 98 Red Balloon
300 4 119 6 2009-04-01 599 98 Red Balloon
300 4 119 4 2009-04-01 398 98 Red Balloon
150 3 119 7 2009-04-01 599 98 Red Balloon
150 3 136 6 2009-06-17 888 98 Red Balloon Dos
150 3 136 5 2009-06-10 850 98 Red Balloon Dos
150 3 119 5 2009-04-01 598 98 Red Balloon
150 3 119 3 2009-03-25 295 98 Red Balloon
150 3 250 2 2009-09-17 851 98 Red Balloon UNO_1
150 3 136 1 2009-04-24 680 98 Red Balloon Dos
et je voudrais obtenir
300 4 119 7 2009-04-24 680 98 Red Balloon
150 3 136 6 2009-06-17 888 98 Red Balloon Dos
150 3 250 2 2009-09-17 851 98 Red Balloon UNO_1
j'espere que ca aide a la comprehension :o)
voici la requete sur une vue qui trie les infos
SELECT *
FROM `v_pap_order`
WHERE `id_player` =98;
le resultat donne
300 4 119 7 2009-04-24 680 98 Red Balloon
300 4 119 6 2009-04-01 599 98 Red Balloon
300 4 119 4 2009-04-01 398 98 Red Balloon
150 3 119 7 2009-04-01 599 98 Red Balloon
150 3 136 6 2009-06-17 888 98 Red Balloon Dos
150 3 136 5 2009-06-10 850 98 Red Balloon Dos
150 3 119 5 2009-04-01 598 98 Red Balloon
150 3 119 3 2009-03-25 295 98 Red Balloon
150 3 250 2 2009-09-17 851 98 Red Balloon UNO_1
150 3 136 1 2009-04-24 680 98 Red Balloon Dos
et je voudrais obtenir
300 4 119 7 2009-04-24 680 98 Red Balloon
150 3 136 6 2009-06-17 888 98 Red Balloon Dos
150 3 250 2 2009-09-17 851 98 Red Balloon UNO_1
j'espere que ca aide a la comprehension :o)
0z0z
Messages postés
108
Date d'inscription
mardi 9 février 2010
Statut
Membre
Dernière intervention
18 mai 2010
5
1 mars 2010 à 10:16
1 mars 2010 à 10:16
En quoi la date et ce qu'il y a après te sont utiles ? Je ne comprend pas pourquoi tu veux absolument mettre une étoile dans ton select. Il ne faut sélectionner que les champs dont tu as besoin.