fonctionnement d'un group by

fonctionnement d'un group by - SQL/NoSQL - Programmation

Marsh Posté le 12-10-2011 à 11:54:41    

Salut,
 
J'aurai aimé savoir comment fonctionne un group by,
pour être plus clair j'ai cette requête.
 

Code :
  1. select nom,prenom,avg(note)
  2. from tablenote
  3. group by nom,prenom


 
Comment oracle va procéder ?
Que va t il faire en premier ?
..
 
Merci


Message édité par donny3 le 12-10-2011 à 15:02:17
Reply

Marsh Posté le 12-10-2011 à 11:54:41   

Reply

Marsh Posté le 12-10-2011 à 14:06:00    

En premier lieu, il va chercher les données, et en second lieu, il va faire les regroupements et le calcul des moyennes.
 
(N.B. Mettre une majuscule à la première lettre des phrases est un vieil usage qui est recommandé, car ça facilite la lecture.
 
Quand on montre des lignes de codes sur un forum, on peut utiliser des balises pour que ce code apparaisse dans un joli cadre. Par exemple, ici, il existe les balises [Fixed]...[/Fixed ] que l'on peut utiliser en les écrivant directement dans le message ou en les insérant en cliquant sur l'icone "Fixe" au dessus du champ d'édition du message.)

Reply

Marsh Posté le 12-10-2011 à 15:05:38    

Donc il va d'abord faire le select
et ensuite faire les calculs appropriés dans chaque groupe.
Si par exemple je rajoute

having(note) > 12


 
il va faire la moyenne que pour les notes qui sont supérieur à 12
et ceci dans chaque groupe nom+prenom.
 

Reply

Marsh Posté le 12-10-2011 à 15:12:23    

je pense pas, dans le select, c'est pas note que t'as, mais avg(note). Si tu veux faire la moyenne que sur les notes > 12, faut mettre cette condition dans le where.
 
Par contre, en faisant  

Code :
  1. SELECT nom,prenom,avg(note) AS Moy
  2. FROM tablenote
  3. GROUP BY nom,prenom HAVING Moy > 12


Là, t'auras que les moyennes > 12.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 12-10-2011 à 15:33:34    

rufo a écrit :


Par contre, en faisant  

Code :
  1. SELECT nom,prenom,avg(note) AS Moy
  2. FROM tablenote
  3. GROUP BY nom,prenom HAVING Moy > 12


Là, t'auras que les moyennes > 12.


Attention si c'est du Oracle, tu peux pas utiliser d'alias dans la clause HAVING, faut plutot faire ca:

Code :
  1. SELECT nom,prenom,avg(note) AS Moy
  2. FROM tablenote
  3. GROUP BY nom,prenom HAVING avg(note)> 12


---------------
C'était vraiment très intéressant.
Reply

Marsh Posté le 12-10-2011 à 15:54:40    

J'ai l'impression qu'avec cette synthaxe,
il va dans chaque groupe faire la moyenne
et le having va me sortir seulement les groupes qui ont une moyenne > 12.
 
Et non me faire la moyenne que pour les notes qui sont > 12.
Je pense que pour cela il faut que je rajoute un  
 

Citation :

where note > 12


 
tout simplement ?

Reply

Marsh Posté le 12-10-2011 à 16:20:00    

c'est ce que j'ai dit dans mon précédent post. Si tu veux faire la moyenne que sur des notes > 12, faut mettre la condition dans le where...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 12-10-2011 à 16:22:26    

oups j'avais mal lu

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed