можно использовать более 1 столбца в MySQL Group BY? - PullRequest
2 голосов
/ 01 мая 2010

Я хочу написать эти SQL-запросы:

CREATE VIEW `uniaverage` AS 
  SELECT `averagegrade`.`mjr`,`averagegrade`.`lev`, 
     AVG(`averagegrade`.`average`) AS `uniAVG` 
  FROM `averagegrade` GROUP BY `averagegrade`.`lev`, `averagegrade`.`mjr`;

Но MySQL Query Browser выдает мне эту ошибку:

Operand Should Contain 1 column(s)

Я где-то читал, что могу использовать group by более чем на 1 столбец !!! Как я могу решить эту ошибку? или как я могу изменить запрос, чтобы получить тот же результат?

Ответы [ 2 ]

7 голосов
/ 01 февраля 2016

Да, вы можете иметь несколько разделенных запятыми столбцов или выражений в предложении GROUP BY точно так же, как это сделал OP. Чтобы взять пример из документов MySQL :

SELECT id, FLOOR(value/100) AS val
FROM tbl_name
GROUP BY id, val;

Не использовать CONCAT() вместо принятый ответ предполагает ; это даст вам неверные результаты, так как CONCAT('foo', 'bar', 'baz') и CONCAT('fo', 'obarb', 'az') одинаковы.

SQL, отправленный OP, в порядке. Сообщение об ошибке, которое он получал, должно быть вызвано чем-то другим в его запросе, который он удалил перед публикацией здесь; его опубликованный код не генерирует ошибку, которую он говорит, что делает. Вот доказательство:

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)
7 голосов
/ 01 мая 2010

Вы можете сделать это:

GROUP BY CONCAT(field1, field2, field3, etc)

Надеюсь, это поможет ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...