我很难理解在MySQL中正确使用GROUP by子句。它与聚合函数一起使用。模式是:
SELECT column1, column2, ... column_n, aggregate_function (expression)
FROM tables
GROUP BY column1, column2, ... column_n;
但我不明白的是,我是否必须列出,在GROUP BY之后,所有列我没有执行聚合功能...这是简单的规则还是我误解了什么?感谢..
答案 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