当前位置:首页 » 编程语言 » sql什么时候考虑分组
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sql什么时候考虑分组

发布时间: 2023-04-12 01:04:42

1. sql语句中分组的作用是什么

聚合函数:sum-求和
avg-求平均值
max-求最大值
min-求最小值
count-求记录数
当使用这些函数时,如果不使用group by (分组)这句,则是对整个表做运算。加上分组子句,则在每个组的基础上运算。

2. SQL 分组数据

连载的上一篇文章,我们讲到通过 SQL 聚合函数可以汇总数据,比如对行进行计数,计算和与平均数,获取最大值和最小值。

但目前为止,我们的汇总都是正对所有行或匹配 WHERE 子句的数据上进行的。比如返回供应商 DLL01 提供的产品数目:

运行结果:

那如果我们想要返回每个供应商提供的产品数目呢?这就需要用到分组聚合了。使用分组可以将数据分为多个逻辑组,然后对每个组进行聚合计算。

分组的创建使用 SELECT 语句中的 GROUP BY 子句,比如下面的 SQL 返回每个供应商提供的产品数目:

运行结果:

上述 SELECT 语句返回两个列, vend_id 为供应商 ID,是分组字段; num_prods 为计算字段,使用 count(*) 聚合而来。 GROUP BY 子句告诉 DBMS 按 vend_id 排序并分组数据,然后对每个分组而不是整个数据集进行聚合。

除了使用 GROUP BY 分组数据外, SQL 还允许过滤分组,规定包含哪些分组,排除哪些分组。比如,我们只想列出供应产品数目在 2 种以上的供应商及其供应产品的数目。

这里有个过滤条件: 供应产品数目大于 2 ,条件中的 供应产品数目 是针对分组后进行聚合产生的计算字段,因此无法使用 WHERE 子句。 WHERE 子句过滤时指定的是行,而不是分组。

为此, SQL 提供了 HAVING 子句来过滤分组,并且 HAVING 支持所有 WHERE 操作符。下面,我们来完成供应产品数目在 2 种以上的供应商及其供应产品的数目。

运行结果:

跟前面的结果相比,供应产品数目等于 2 的供应商信息就不见啦~

关于 WHERE 子句和 HAVING 子句的区别,我们可以再通过一个案例理解一下。下面的 SQL 检索具有两个或以上产品且其价格大于等于 4 的供应商。

其中产品表如下:

SQL 语句如下:

运行结果:

截止目前,我们已经学了不少的 SELECT 子句,下面小鱼针对目前我们已经学习的 SELECT 子句来总结一下他们在 SELECT 语句中的先后顺序。

表中子句的排列顺序即为它们在 SELECT 语句中依次出现的次序:

还是上面的例子,检索具有两个或以上产品且其价格大于等于 4 的供应商和其供应的产品数目,不过检索检索需要按照产品数目升序排列。

运行结果:

本节,我们学习了使用 GROUP BY 子句对多组数据进行汇总计算,并返回每个分组的结果。并实践了如何使用 HAVING 子句过滤分组。

3. sql中为什么要使用分组查询

分组查询一般用于统计数据,使用分组能让汇总结果一目了然。

1、如emp表中有如下数据:

4. sql中什么情况下用分组

你指的应该是“group by”吧?
其实可以这样理解,举个例子:
比如,一张“学生成绩表”,现在要求你分别求出(注意是“分别”)男生和女生的平均成绩(注:指的是“所有男生的平均成绩”和“所有女生的平均成绩”),此时,你就必须通过“性别”字段进行分组,然后才可以分别求出男生和女生平均成绩!
【个人感觉学习这些语句的时候最好赋予实际的环境中去理解,这样更清楚也更好理解。希望我的回答对你有所帮助!】

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

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, ProctPlace, Price, ID AS IDE, Discount
FROM T_TEST_FRUITINFO
WHERE (ProctPlace = 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查出来的结果再排序,那先排序出来的结果有什么意义呢。

6. sql语句中啥什么要用到group bygroup by什么根据什么分组的

比如你有一张学生成绩表 就这样:

看到 group by 的用法了吧