我很难理解 MySQL 中 GROUP by 子句的正确使用。它与聚合函数一起使用。模式是:
SELECT column1, column2, ... column_n, aggregate_function (expression)
FROM tables
GROUP BY column1, column2, ... column_n;
但我不明白的是我是否必须在 GROUP BY 之后列出我没有执行聚合函数的所有列......这是简单的规则还是我误解了什么?谢谢..
答案是你可以,但你不必。
像下面这样的查询在标准 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
如果你的数据库有很多 product_id
例如,您有产品表和订单表。您只想按顺序获得全部产品。然后你使用GROUP BY product_id
. 而且您只会获得唯一的ID。
阅读本文以了解更多关于GROUP BY
您不需要在Mysql 中执行此操作,但是对于非分组/非聚合列,您将获得不可预测的结果。
如mysql doc中所述:
服务器可以从每个组中自由选择任何值,因此除非它们相同,否则选择的值是不确定的。
但我真的建议将它们全部列出,因为它是 ANSI,强制 int 大多数 dbms,并且会给你可预测的结果。
不可预测的例子
想象一张桌子
id, code, name
有价值观
1, 2, 'a';
2, 2, 'b';
如果你做
select code, name, count(*)
group by code;
您将只返回一行,但可以将“a”或“b”作为名称的返回值。