Am1*_*3zA 2 mysql sql 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`;
Run Code Online (Sandbox Code Playgroud)
但是MySQL Query Browser给了我这个错误:
Operand Should Contain 1 column(s)
Run Code Online (Sandbox Code Playgroud)
我在哪里读到我可以在超过1列使用group by !!! 我该如何解决这个错误?或者如何更改查询以获得相同的结果?
你可以这样做:
GROUP BY CONCAT(field1, field2, field3, etc)
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助..
是的,您可以在GROUP BY子句中使用多个逗号分隔的列或表达式,就像OP一样.以MySQL文档为例:
SELECT id, FLOOR(value/100) AS val
FROM tbl_name
GROUP BY id, val;
Run Code Online (Sandbox Code Playgroud)
不要使用,CONCAT()因为接受的答案表明 ; 它会给你不正确的结果,因为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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3582 次 |
| 最近记录: |