sql - 可以在 MySQL Group BY 中使用多于 1 列吗?

标签 sql mysql group-by

我想写这些 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)

我在某处读到我可以在不止 1 列上使用 group by! 我该如何解决这个错误?或者如何更改查询以获得相同的结果?

最佳答案

是的,您可以在 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') 是一样的。

OP 发布的 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)

关于sql - 可以在 MySQL Group BY 中使用多于 1 列吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2750418/

相关文章:

python - 将列表中的字符串插入数据框公式以在 Pandas 中循环计算

mysql - 设计MySQL数据库

php - 删除 "&"之后的所有符号

sql - 别名FOR XML PATH结果

php - form action 和 post 方法如何一起工作?

mysql - 启动 MySQL 时出现错误 "Plugin ' InnoDB 注册为存储引擎失败”

r - 基于几个不同的(子)分组(列)计算一列中唯一字符元素的数量

sql - 删除并重新创建主键

mysql - 关系数据的数据库结构建议

postgresql - 如何将 count(*) 结果加总?