我在书上和网上都看到了以下的内容:
GROUP BY 是分组查询, 一般 GROUP BY 是和聚合函数配合使用
group by 有一个原则,就是 select 后面的所有列中,没有使用聚合函数的列,必须出现在 group by 后面但是我如下的例子却正确执行成功了customer表的数据
ID NAME AGE
1 Tom 21
2 Mike 24
3 Jack 30
4 Linda 25
5 Tom 25订单orders表的数据
ID ORDER_NUMBER PRICE CUSTOMER_ID
1 Tom_Order001 100 1
2 Tom_Order002 200 1
3 Tom_Order003 300 1
4 Mike_Order001 100 2
5 Jack_Order001 200 3
6 Linda_Order001 100 4
7 UnknownOrder 200 null业务:
按客户分组,统计每个客户的订单数目sql是:
SELECT c.id AS id,
c.name AS name,
c.age AS age,
COUNT(o.id) AS num
FROM customers c
left JOIN orders o
ON c.id = o.customer_id
GROUP BY c.id
执行成功了,
查询结果是:
id name age num
1 Tom 21 3
2 Mike 24 1
3 Jack 30 1
4 Linda 25 1
5 Tom 25 0这个跟“select 后面的所有列中,没有使用聚合函数的列,必须出现在 group by 后面”有违背,
不知道怎么回事,请高手指教
GROUP BY 是分组查询, 一般 GROUP BY 是和聚合函数配合使用
group by 有一个原则,就是 select 后面的所有列中,没有使用聚合函数的列,必须出现在 group by 后面但是我如下的例子却正确执行成功了customer表的数据
ID NAME AGE
1 Tom 21
2 Mike 24
3 Jack 30
4 Linda 25
5 Tom 25订单orders表的数据
ID ORDER_NUMBER PRICE CUSTOMER_ID
1 Tom_Order001 100 1
2 Tom_Order002 200 1
3 Tom_Order003 300 1
4 Mike_Order001 100 2
5 Jack_Order001 200 3
6 Linda_Order001 100 4
7 UnknownOrder 200 null业务:
按客户分组,统计每个客户的订单数目sql是:
SELECT c.id AS id,
c.name AS name,
c.age AS age,
COUNT(o.id) AS num
FROM customers c
left JOIN orders o
ON c.id = o.customer_id
GROUP BY c.id
执行成功了,
查询结果是:
id name age num
1 Tom 21 3
2 Mike 24 1
3 Jack 30 1
4 Linda 25 1
5 Tom 25 0这个跟“select 后面的所有列中,没有使用聚合函数的列,必须出现在 group by 后面”有违背,
不知道怎么回事,请高手指教
12.2.7. SELECT Syntax
MySQL extends the use of GROUP BY to allow selecting fields that are not mentioned in the GROUP BY clause.http://dev.mysql.com/doc/refman/5.1/zh/sql-syntax.html#select
MySQL对GROUP BY的使用进行了扩展,允许选择在GROUP BY子句中没有被提到的字段。如果您没有得到预期的结果,请阅读GROUP BY的说明,请参见12.10节,“与GROUP BY子句同时使用的函数和修改程序”。
我真是恍然大悟呀,呵呵。我机器上就装了mysql,比较小因为麻烦朋友帮忙写一个想一个想实现我这个业务的sql
谢谢了,
c.name AS name,
c.age AS age,
COUNT(o.id) AS num
FROM customers c
left JOIN orders o
ON c.id = o.customer_id
GROUP BY c.id
我是做java的
我的这个sql其实是 在运行hibernate的时候生成的。既然有:“group by 有一个原则,就是 select 后面的所有列中,没有使用聚合函数的列,必须出现在 group by 后面 ”
这么一个原则那么好像在写hibernate的hql语句的时候没有这个限制
像:“select c.id,c.name,count(o) from Customer c left outer join c.orders o group by c.id”不知道ACMAIN_CHM朋友对hibernate有没有研究,这个问题以前都没又考虑过