1

我很难理解 MySQL 中 GROUP by 子句的正确使用。它与聚合函数一起使用。模式是:

SELECT column1, column2, ... column_n, aggregate_function (expression)
   FROM tables
GROUP BY column1, column2, ... column_n;

但我不明白的是我是否必须在 GROUP BY 之后列出我没有执行聚合函数的所有列......这是简单的规则还是我误解了什么?谢谢..

4

3 回答 3

1

答案是你可以,但你不必。

像下面这样的查询在标准 SQL 中是非法的,但在 MySQL 中是合法的:

SELECT o.custid, c.name, MAX(o.payment)
FROM orders AS o, customers AS c
WHERE o.custid = c.custid
GROUP BY o.custid;

但是服务器可以自由地从每个组中选择任何值,因此除非它们相同,否则选择的值是不确定的。

检查此链接以获取参考:http: //dev.mysql.com/doc/refman/5.1/en/group-by-extensions.html

于 2013-08-23T11:25:16.083 回答
0

如果你的数据库有很多 product_id

例如,您有产品表和订单表。您只想按顺序获得全部产品。然后你使用GROUP BY product_id. 而且您只会获得唯一的ID。

阅读本文以了解更多关于GROUP BY

按 SQL 分组

于 2013-08-23T11:26:25.297 回答
0

您不需要Mysql 中执行此操作但是对于非分组/非聚合列,您将获得不可预测的结果。

如mysql doc中所述:

服务器可以从每个组中自由选择任何值,因此除非它们相同,否则选择的值是不确定的。

但我真的建议将它们全部列出,因为它是 ANSI,强制 int 大多数 dbms,并且会给你可预测的结果。

不可预测的例子

想象一张桌子

id, code, name

有价值观

1, 2, 'a';
2, 2, 'b';

如果你做

select code, name, count(*)
group by code;

您将只返回一行,但可以将“a”或“b”作为名称的返回值。

于 2013-08-23T11:24:15.703 回答