Oui, vous pouvez avoir plusieurs colonnes ou expressions séparées par des virgules dans une clause GROUP BY exactement comme l'OP a fait. Pour prendre un exemple de the MySQL docs:
SELECT id, FLOOR(value/100) AS val
FROM tbl_name
GROUP BY id, val;
Ne pas utiliserCONCAT()
au lieu que the accepted answer suggests; il vous donnera des résultats incorrects, puisque CONCAT('foo', 'bar', 'baz')
et CONCAT('fo', 'obarb', 'az')
sont les mêmes.
Le code SQL affiché par l'OP est correct tel quel. Le message d'erreur qu'il recevait doit avoir été provoqué par quelque chose d'autre dans sa requête qu'il a supprimé avant de l'envoyer ici; son code posté ne génère pas l'erreur qu'il dit faire. Voici la preuve:
mysql> CREATE TABLE averagegrade (mjr int, lev int, average int);
Query OK, 0 rows affected (0.12 sec)
mysql> INSERT INTO averagegrade VALUES (5,6,7), (5,6,7), (100, 200, 300);
Query OK, 3 rows affected (0.05 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql>
mysql> -- OP's SQL, copied verbatim:
mysql> CREATE VIEW `uniaverage` AS
-> SELECT `averagegrade`.`mjr`,`averagegrade`.`lev`,
-> AVG(`averagegrade`.`average`) AS `uniAVG`
-> FROM `averagegrade` GROUP BY `averagegrade`.`lev`, `averagegrade`.`mjr`;
Query OK, 0 rows affected (0.03 sec)
mysql>
mysql> SELECT * FROM uniaverage;
+------+------+----------+
| mjr | lev | uniAVG |
+------+------+----------+
| 5 | 6 | 7.0000 |
| 100 | 200 | 300.0000 |
+------+------+----------+
2 rows in set (0.00 sec)
Êtes-vous sûr que l'erreur fait référence à la clause 'GROUP BY'? La syntaxe que vous donnez est appropriée, et IWFM. – outis
Je suis sûr à 99% parce que je n'ai pas d'operan dans mon groupe de requête sauf celui qui a 2 arguments – Am1rr3zA
qui, croyez-le ou non, ne suffit pas, en partie parce qu'il y a d'autres opérandes (AVG par exemple). Y a-t-il des différences, aussi triviales que cela puisse paraître, entre la requête que vous avez publiée et ce que vous avez lancé? Quelle version de MySQL utilisez-vous? Quel est le type de moyenne de table? En fait, quelle est la définition de la note moyenne de la table (utilisez 'SHOW CREATE TABLE averagegrade'? Quel est le résultat de' EXPLAIN' sur l'instruction 'SELECT' (supprimez la clause' CREATE VIEW')? Essayez d'exécuter la requête depuis la commande ligne client pour voir si elle vous dit où se trouve le problème dans l'énoncé – outis