SQL中,group by 跟order by有什么区别?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL中,group by 跟order by有什么区别?相关的知识,希望对你有一定的参考价值。

参考技术A group
by
是按。。。分组的意思,order
by
是按。。。排序的意思
group
by
单词就是将表按单词分成几个组
order
by
A,B,C
就是
先按A排序,再按B排序,再按C排序
参考技术B order
by
是按表中某字段排列表中数据
group
by
是按某些字段分类。
例如按
1.按年龄排序表中的记录
select
*
from
users
order
by
age
2.按年龄分类表中数据
(就是求各个年龄的人数)
select
age,count(*)
as
number1
from
users
group
by
age
参考技术C GROUP
BY
是分组,主要用于统计,合计等SQL中使用
比如:
select
userid,count(*)
as
cnt
from
usercount
group
by
userid;
order
by
是排序,即按什么字段来排序,顺序或倒序。
在group
by
中可以使用order
by
如:
select
userid,count(*)
as
cnt
from
usercount
group
by
userid
order
by
cnt
(倒序时添加
desc)

sql语句执行顺序之group by、order by

参考技术A 1、先执行group by后执行order by,如果相同id的记录只获取id大的一条记录,使用子查询(先排序后分组):

select * from (select * from table1 order by id desc limit 9999) a group by type_id;

PS:group by需要和limit配合使用,不使用limit语句会自动被优化掉group by无效。

2、字段值为0的记录不分组,字段值大于0的记录进行分组:

方法1:使用union all

SELECT * FROM `table1` WHERE name='0' UNION ALL SELECT * FROM `table1` WHERE name!='0' group by name;

方法2:使用case when :select的时候判断id是否等于0,等于0的话则赋值,然后再使用group by分组

select * from (select o.add_time,og.id,(CASE WHEN og.product_id<1 THEN o.add_time ELSE og.product_id END) as product_id from order as o left join order_goods as og on o.order_id=og.order_id order by o.add_time desc limit 9999) table1 group by product_id order by add_time desc

拓展:(使用上面sql)如果product_id不为空,需要加上判断只获取开启展示状态的product数据:

select * from (select o.add_time,og.id,(CASE WHEN og.product_id>1 THEN (select id from product where product.id=og.product_id and product.is_show=1) ELSE o.add_time END) as product_id from order as o left join order_goods as og on o.order_id=og.order_id order by o.add_time desc limit 9999) table1  where product_id is not null group by product_id order by add_time desc

方法3:使用isfull()函数 ,思路和方法2一样,都是判断字段值是否为空,若是空值先赋一个临时值后分组

需要注意的是,isfull只能用于判断是否为null,若值是0无效(见图3 图4)

以上是关于SQL中,group by 跟order by有什么区别?的主要内容,如果未能解决你的问题,请参考以下文章

sql中group by和order by的区别

SQL里面group by 语句和WHERE的区别,高手进

SQL语句中,如果有group by 和order by两个语句,是先分组还是先排序?

SQL语句中,如果有group by 和order by两个语句,是先分组还是先排序?

sql语句执行顺序之group by、order by

order by 与group by 啥意思啊,数据库高手看看