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

如题所述

第1个回答  2022-10-03

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

先进行分组处理。
Group By 和 Having, Where ,Order by这些关键字是按照如下顺序进行执行的:Where, Group By, Having, Order by。

首先where将最原始记录中不满足条件的记录删除(所以应该在where语句中尽量的将不符合条件的记录筛选掉,这样可以减少分组的次数)
然后通过Group By关键字后面指定的分组条件将筛选得到的检视进行分组

接着系统根据Having关键字后面指定的筛选条件,将分组检视后不满足条件的记录筛选掉
最后按照Order By语句对检视进行排序,这样最终的结果就产生了。
在这四个关键字中,只有在Order By语句中才可以使用最终检视的列名,如:

SELECT FruitName, ProductPlace, Price, ID AS IDE, Discount
FROM T_TEST_FRUITINFO
WHERE (ProductPlace = N'china')
ORDER BY IDE
这里只有在ORDER BY语句中才可以使用IDE,其他条件语句中如果需要引用列名则只能使用ID,而不能使用IDE。

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

肯定是group by先
order by优先顺序最低,在最后
group by 语句执行后记录会按关键字自动升序?
不一定,group by只负责分组。

VF 中先排序order by还是先分组 group by

这是需要看题上的要求,要求要分组才分组,要求要排序才排序的,并不是每道题两个都同时需要

sql语句中 order by 排序原则

ORDER BY这个指令来达到我们的目的。
ORDER BY 的语法如下:
SELECT "栏位名"
FROM "表格名"
[WHERE "条件"]
ORDER BY "栏位名" [ASC, DESC]
[] 代表 WHERE 是一定需要的。不过,如果 WHERE 子句存在的话,它是在 ORDER BY 子句之前。 ASC 代表结果会以由小往大的顺序列出,而 DESC 代表结果会以由大往小的顺序列出。如果两者皆没有被写出的话,那我们就会用 ASC。
我们可以照好几个不同的栏位来排顺序。在这个情况下, ORDER BY 子句的语法如下(假设有两个栏位):
ORDER BY "栏位一" [ASC, DESC], "栏位二" [ASC, DESC]
若我们对这两个栏位都选择由小往大的话,那这个子句就会造成结果是依据 "栏位一" 由小往大排。若有好几笔资料 "栏位一" 的值相等,那这几笔资料就依据 "栏位二" 由小往大排。

select-sql 语句中,筛选用(?)子句,分组用group by 子句,排序用order by 子句

筛选用
where 子句

比如
select * from sutdent where 年龄=20
这就是根据年龄这个条件进行筛选

oracle sql语句中 先执行where还是order by

where 里面条件 and 是先执行 and 前面 还是后面条件这个其实和你写的顺序不大,这个先后顺序,是资料库来根据表/索引的资讯来决定的。例如一个 学生表, 有学号,姓名,性别其中 学号是主键, 姓名上面有个索引。 找 名字叫 强妹 的女生: SELECT * FROM 学生 WHERE 姓名='强妹' AND 性别 = '女' 与 SELECT * FROM 学生 WHERE 性别 = '女' AND 姓名='强妹' 资料库在处理 SQL 以前,都会去分析, 发现 查询的条件中, 姓名上面有索引,而性别上面没有。 那么优先根据 姓名的条件, 去检索,然后再去把通过索引得到的资料,去筛选 性别=女的比如表里面共有10000行。姓名叫 '强妹' 的只有一个。那么通过索引,一步就定位到那一行。然后再判断这一行资料的 性别栏位, 是不是 = '女' 假如 姓名/性别 都没有索引呢?那就是执行 全表扫描。不分先后。什么意思呢?就是假如 表里面10000行资料。那就是从第一行开始, 检视 姓名与性别 条件。 满足的返回。 不满足的丢弃。 直到100行都处理完。并不是一口气把所有的资料,都放到记忆体里面,然后 姓名判断一次, 去掉部分, 性别判断一次,再去掉部分。 蓝屏

sql语句中的where语句和order by语句,哪个语句先执行

④SELECT [DISTINCT] * | 列 [别名],列 [别名],……
①FROM 表名称 [别名],表名称 [别名],……
②[WHERE 限定条件]
③[GROUP BY 分组栏位,[分组栏位,分组栏位……]]
⑤[ORDER BY 排序列名 [ASC|DESC],排序列名 [ASC|DESC],……]

where先执行:SQL语句执行顺序:SELECTFROM--1WHERE--2GROUPBY--3HAVING--4ORDERBY--5

where先执行,然后对筛出来的结果再排序。
如果不先按where查出来的结果再排序,那先排序出来的结果有什么意义呢。