SQL数据库中查询语句Order By和Group By有啥区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL数据库中查询语句Order By和Group By有啥区别相关的知识,希望对你有一定的参考价值。

首先我们要明确,group
by 和 order by
是两个不同的理念。
group
by
是分组。比如学校要查询班级人数,这时我们就要用到group
by
。把每个班分别进行统计最后得到每个班的学生数量。注意有group
by
语句出现的时候,前面的查询字段里只能出现聚合函数个分组函数。

order
by
是排序字段的意思。就是对你查询出来的字段进行排序,有升序(asc)和降序(desc)两种。
参考技术A 首先说明SQL句子里面,order
by
必须在group
by
后面。没有group
by就不能用order
by
.第二。group
by是对数据的分组,order
by
是对分组后的数据进行排序、
参考技术B order
by
是排序的
用升序asc或降序desc控制
group
by是分组用的。。group
by
自居中指定的列必须包含在select列表
还有就是上面说的
order
by
必须在group
by
后面
差不多就这些吧。。。
参考技术C gourp
by
用于数据的分组(可以是多分列)、、order
by是用于对数据进行排序(也可以是多列、多列的情况就是、在地一个列有相同的数据时、然后根据第二个列进行排序)、
但是要注意的是order
by
要在
gourp
by的后面、本回答被提问者采纳
参考技术D 楼上的说法有误,谁说的没有group
by就不能有orader
by?不要误导人哦。第二点倒是正确,第一点说法部分有误,order
by在group
by后面没错,但是没有group
by照样可以用order
by

在 sql 查询中使用 group/order by 和 union 子句

【中文标题】在 sql 查询中使用 group/order by 和 union 子句【英文标题】:Using group/order by with union clause in sql query 【发布时间】:2021-03-30 05:18:43 【问题描述】:

我有四个 sql 查询给了我相同的列,所以我尝试使用 UNION 子句将它们组合起来。以下是我尝试过的,但它给了我一个错误:

select clientid, 
'Test1' as client_name,
client_timestamp,
sum(client_counts) as count,
processIds as contracts
from output_1
group by 1,2,3,5
order by 1

UNION

select clientid, 
'Test2' as client_name,
client_timestamp,
sum(client_counts) as count,
'' as contracts
from output_2
group by 1,2,3,5
order by 1

UNION

select clientid, 
'Test3' as client_name,
client_timestamp,
sum(kite_count) as count,
process_metric as contracts
from output_3
group by 1,2,3,5
order by 1

UNION

select clientid, 
'Test4' as client_name,
execution_client_ts as client_timestamp,
sum(kite_count) as count,
process_data as contracts
from output_4
group by 1,2,3,5
order by 1

我得到的错误是 UNION 行周围的“无效语法”。我在这里做错什么了吗?

【问题讨论】:

【参考方案1】:

union 查询只能有一个 order by 子句。

如果您对整个结果集的排序感到满意,您可以删除所有order by 子句,只保留查询末尾的最后一个子句。它适用于union 生成的整个数据集。

请注意,您的 UNIONs 等同于 UNION ALLs - 因为每个成员的客户名称不同 - 应该这样表述。

另一方面,如果您想订购达到子结果,那么这是不同的。基本上,每个成员都需要一个标志,然后可以用来识别每个组。客户名称可能是一个不错的选择,所以:

order by client_name, client_id

【讨论】:

我是否需要将所有查询括在括号中,然后将 order by 放在最后,或者只从除最后一个之外的所有查询中删除 orderby 并且它应该可以工作?下面好吗? select .. from output1 group by 1,2,3,5 union all select .. from output2 group by 1,2,3,5 union all select .. from output1 group by 1,2,3,5 order by 1 @AndyP:删除除最后一个之外的所有内容都应该有效,如文档中所示:docs.aws.amazon.com/redshift/latest/dg/…

以上是关于SQL数据库中查询语句Order By和Group By有啥区别的主要内容,如果未能解决你的问题,请参考以下文章

当sql语句中where,order by,group by同时使用查询sql语句中三者的顺序

SQL如何使用order by语句查询数据表的多字段

SQL语句之order by group byhavingwhere

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

SQL中的group by语句和order by语句怎么用?最好能有个例子

sql语句 group by和order by