代码之家  ›  专栏  ›  技术社区  ›  Am1rr3zA

在mysql group by中可以使用1列以上吗?

  •  1
  • Am1rr3zA  · 技术社区  · 16 年前

    我要编写这些SQL查询:

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

    但是MySQL查询浏览器给了我这个错误:

    Operand Should Contain 1 column(s)
    

    我在某个地方读到我可以在一个以上的专栏上使用GroupBy!!!! 如何解决此错误?或者如何更改查询以获得相同的结果?

    2 回复  |  直到 8 年前
        1
  •  5
  •   Community Mohan Dere    9 年前

    是的,在一个group by子句中可以有多个逗号分隔的列或表达式,与op完全相同。举个例子 the MySQL docs :

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

    不要 使用 CONCAT() 取而代之 the accepted answer suggests ;它会给您错误的结果,因为 CONCAT('foo', 'bar', 'baz') CONCAT('fo', 'obarb', 'az') 都一样。

    操作所发布的SQL是正常的。他收到的错误消息一定是由他在发布到这里之前删除的查询中的其他内容引起的;他发布的代码不会生成他所说的错误。以下是证据:

    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)
    
        2
  •  8
  •   Ian P    16 年前

    您可以这样做:

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

    希望这有帮助。