MySQL:难以理解GROUP BY

时间:2013-08-23 11:20:55

标签: mysql sql

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

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

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

3 个答案:

答案 0 :(得分:1)

答案是你可以,但你没有。

如下所示的查询在standerd 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

答案 1 :(得分:0)

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

如mysql doc中所述:

  

服务器可以自由选择每个组中的任何值,因此除非他们   如果是相同的,所选择的值是不确定的。

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

不可预知的例子

想象一下带有

的表格
id, code, name

带值

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

如果你做

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

您只返回一行,但可能有' a'或者' b'作为名称的返回值。

答案 2 :(得分:0)

如果您的数据库包含许多product_id

例如,您有产品表和订单表。您只想按顺序获得总产品。然后使用GROUP BY product_id。并且您将获得唯一的ID。

阅读本文以了解有关GROUP BY

的更多信息

Group BY SQL