Bonjour,

Je ne comprends pas pourquoi il est obligatoire d'ajouter dans la clause GROUP BY toutes les colonnes du SELECT lorsque la clé primaire suffirait.

Exemple: J'ai une table Clients et une table Ordres (synonyme de transaction dans ce cas). Je désire obtenir la somme des ordres de chaque client ainsi que son prénom.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
SELECT Cli.Prenom, SUM(Ord.Montant) FROM Clients Cli
INNER JOIN Ordres Ord
ON Cli.Num_cli = Ord.Num_cli
GROUP BY Cli.Prenom;
Cependant le résultat de cette requête est faux. Si j'ai deux clients prénommé Albert, le résultat de cette requête groupera les lignes des clients ayant le même prénom. Jusqu'ici je comprends, c'est assez normal.

Pour rendre cette requête correcte, il faudrait grouper aussi par la clé primaire comme ceci:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
SELECT Cli.Prenom, SUM(Ord.Montant) FROM Clients Cli
INNER JOIN Ordres Ord
ON Cli.Num_cli = Ord.Num_cli
GROUP BY Cli.Prenom, Cli.Num_cli;
Mais pourquoi on ne pourrait pas écrire cette requête de cette façon:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
SELECT Cli.Prenom, SUM(Ord.Montant) FROM Clients Cli
INNER JOIN Ordres Ord
ON Cli.Num_cli = Ord.Num_cli
GROUP BY Cli.Num_cli;
En effet je trouve que de cette façon ça devrait fonctionner. Mais je reçois bien une erreur ORA-00979: n'est pas une expression GROUP BY.

D'avance merci beaucoup et meilleures salutations.