Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >SQL中Group By的使用,以及一些特殊使用方法

SQL中Group By的使用,以及一些特殊使用方法

作者头像
allsmallpig
发布于 2021-02-25 02:32:17
发布于 2021-02-25 02:32:17
2.7K00
代码可运行
举报
文章被收录于专栏:allsmallpi博客allsmallpi博客
运行总次数:0
代码可运行

转载自 https://www.cnblogs.com/jingfengling/p/5962182.html 

1、概述

“Group By”从字面意义上理解就是根据“By”指定的规则对数据进行分组,所谓的分组就是将一个“数据集”划分成若干个“小区域”,然后针对若干个“小区域”进行数据处理。

2、原始表

3、简单Group By

示例1
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select 类别, sum(数量) as 数量之和
from A
group by 类别

返回结果如下表,实际上就是分类汇总。

4、Group By 和 Order By

示例2
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select 类别, sum(数量) AS 数量之和
from A
group by 类别
order by sum(数量) desc

返回结果如下表

在Access中不可以使用“order by 数量之和 desc”,但在SQL Server中则可以。

5、Group By中Select指定的字段限制

示例3
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select 类别, sum(数量) as 数量之和, 摘要
from A
group by 类别
order by 类别 desc

示例3执行后会提示下错误,如下图。这就是需要注意的一点,在select指定的字段要么就要包含在Group By语句的后面,作为分组的依据;要么就要被包含在聚合函数中。

6、Group By All

示例4
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select 类别, 摘要, sum(数量) as 数量之和
from A
group by all 类别, 摘要

示例4中则可以指定“摘要”字段,其原因在于“多列分组”中包含了“摘要字段”,其执行结果如下表

“多列分组”实际上就是就是按照多列(类别+摘要)合并后的值进行分组,示例4中可以看到“a, a2001, 13”为“a, a2001, 11”和“a, a2001, 2”两条记录的合并。

SQL Server中虽然支持“group by all”,但Microsoft SQL Server 的未来版本中将删除 GROUP BY ALL,避免在新的开发工作中使用 GROUP BY ALL。Access中是不支持“Group By All”的,但Access中同样支持多列分组,上述SQL Server中的SQL在Access可以写成

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select 类别, 摘要, sum(数量) AS 数量之和
from A
group by 类别, 摘要

7、Group By与聚合函数

在示例3中提到group by语句中select指定的字段必须是“分组依据字段”,其他字段若想出现在select中则必须包含在聚合函数中,常见的聚合函数如下表:

函数

作用

支持性

sum(列名)

求和

max(列名)

最大值

min(列名)

最小值

avg(列名)

平均值

first(列名)

第一条记录

仅Access支持

last(列名)

最后一条记录

仅Access支持

count(列名)

统计记录数

注意和count(*)的区别

示例5:求各组平均值
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select 类别, avg(数量) AS 平均值 from A group by 类别;
示例6:求各组记录数目
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select 类别, count(*) AS 记录数 from A group by 类别;
示例7:求各组记录数目

8、Having与Where的区别

  • where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,where条件中不能包含聚组函数,使用where条件过滤出特定的行。
  • having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件过滤出特定的组,也可以使用多个分组标准进行分组。
示例8
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select 类别, sum(数量) as 数量之和 from A
group by 类别
having sum(数量) > 18
示例9:Having和Where的联合使用方法
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select 类别, SUM(数量)from A
where 数量 gt;8
group by 类别
having SUM(数量) gt; 10

9、Compute 和 Compute By

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select * from A where 数量 > 8

执行结果:

示例10:Compute
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select *
from A
where 数量>8
compute max(数量),min(数量),avg(数量)

执行结果如下:

compute子句能够观察“查询结果”的数据细节或统计各列数据(如例10中max、min和avg),返回结果由select列表和compute统计结果组成。

示例11:Compute By
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select *
from A
where 数量>8
order by 类别
compute max(数量),min(数量),avg(数量) by 类别

执行结果如下:

示例11与示例10相比多了“order by 类别”和“... by 类别”,示例10的执行结果实际是按照分组(a、b、c)进行了显示,每组都是由改组数据列表和改组数统计结果组成,另外:

  • compute子句必须与order by子句用一起使用
  • compute...by与group by相比,group by 只能得到各组数据的统计结果,而不能看到各组数据

在实际开发中compute与compute by的作用并不是很大,SQL Server支持compute和compute by,而Access并不支持

SQL compute by 的使用 https://www.cnblogs.com/Gavinzhao/archive/2010/07/12/1776107.html

where、having之间的区别和用法 http://blog.csdn.net/jdjh1024/article/details/76647866

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018/01/31 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
CentOS 7上源码包方式安装MySQL5.7.22
CentOS7默认安装了和MySQL有兼容性的MariaDB数据库,在我们安装MySQL5.7之前为了避免发生冲突首先删除MariaDB。 # rpm -qa | grep maria
星哥玩云
2022/08/16
1.1K0
技术分享 | 如何在 OBClient 客户端实现自定义输出显示
爱可生华东交付服务部 DBA 成员,主要负责 MySQL 故障处理及相关技术支持。
爱可生开源社区
2023/08/18
4830
技术分享 | 如何在 OBClient 客户端实现自定义输出显示
创建一个带GPG-signed(gpgkey)的yum源
yum源的搭建参考之前发布的文章 编译 Libvirt 源码 并 创建yum源 Create a yum repository with custom GPG-signed RPM packages generate a GPG [root@kubevirtci ~]# docker exec -ti libvirt-build bashEmulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.[root@c6
后端云
2022/11/25
6960
三分钟手操rpm包
每每开发完一个程序,对于开发人员来说commit完代码就万事大吉了,实施和运维就只能骂一句仆街,然后硬着头皮去部署。
机智的程序员小熊
2019/12/12
6890
三分钟手操rpm包
CentOS6下rpm打包实战
最近的工作需要将以前编译安装的软件包打包成rpm包,这里将打包过程记录一下以备忘。 准备rpm打包环境 我这里用的操作系统是CentOS6.7,redhat系的其它发行版应该也类似。 安装rpm-build 1 sudo yum install -y gcc make rpm-build redhat-rpm-config vim lrzsz 创建必须的文件夹和文件 mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS} echo '%_topdir %(
jeremyxu
2018/05/10
1.6K0
在CentOS环境下编译GreatSQL RPM包
戳此链接 https://gitee.com/GreatSQL/GreatSQL/releases/tag/GreatSQL-8.0.32-25,找到 greatsql-8.0.32-25.tar.xz 下载GreatSQL源码包,放在上面创建的 /root/rpmbuild/SOURCES 目录下,并解压缩。
老叶茶馆
2024/01/01
2390
在CentOS环境下编译GreatSQL RPM包
学习笔记0507----LAMP架构
LAMP:Linux+Apache(httpd)+Maridb(Mysql)+PHP,常用来搭建动态网站或者服务器的开源软件。
嘻哈记
2020/11/24
1.9K0
KubeVirt替换virt-lantch中的libvirt的版本
编译 Libvirt 源码 并 创建yum源 参考之前发布的文章 编译 Libvirt 源码 并 创建yum源
后端云
2022/11/25
3440
RPM包制作方法
最近有同学问我制作RPM包相关的问题,我发现我以前做过,但是忘记记录了,现在记录一下:
用户3765803
2019/03/05
1.3K0
Centos6利用rpm-build编译Nginx rpm包
如果需要利用service来控制Nginx,SOURCES路径中还需要准备一个nginx启动程序:
子润先生
2021/06/13
7940
MySQL8.0.40源码安装
因为MySQL发布了8.0.40版本,与之前的版本相比,部分依赖包发生了变化,因此重新编译一版,也便于大家参考。
俊才
2024/10/17
5260
LAMP架构应用实战—Apache服务介绍与安装02
............................................................................................................................过程省略
民工哥
2020/09/16
6300
openssl源码打包编译成rpm包
环境# iSoftserver-v4.2(Centos-7) openssl version:1.0.2k 编译# 从github上看到的编译脚本,本地修改后: #!/bin/bash set -e set -v mkdir ~/openssl && cd ~/openssl yum -y install \ curl \ which \ make \ gcc \ perl \ perl-WWW-Curl \ rpm-build # Get open
Amadeus
2022/10/25
1.7K0
openssl源码打包编译成rpm包
CentOS7下制作openssl1.1.1i RPM包并升级
OpenSSL官方发布了拒绝服务漏洞风险通告,漏洞编号为CVE-2020-1971
yuanfan2012
2020/12/31
5.6K0
CentOS7下制作openssl1.1.1i RPM包并升级
CentOS7.0 创建本地yum源和局域网yum源
这几天一直在学习在CentOS7.0创建本地yum源和局域网yum源,准备两台CentOS7.0虚拟机,一个做服务器,一个做客户端;由于开发环境只有局域网,没法使用网上的各种yum源,来回拷贝rpm包安装麻烦,还得解决依赖问题。
麦克劳林
2018/09/11
1.5K0
在CentOS环境下编译GreatSQL RPM包
此链接 https://gitee.com/GreatSQL/GreatSQL/releases/tag/GreatSQL-8.0.32-25,找到 greatsql-8.0.32-25.tar.xz 下载GreatSQL源码包,放在上面创建的 /root/rpmbuild/SOURCES 目录下,并解压缩。
GreatSQL社区
2024/01/10
1900
在CentOS环境下编译GreatSQL RPM包
RPM与YUM管理包程序
ldconfig通常在系统启动时运行,而当用户安装了一个新的动态链接库时,就需要手工运行这个命令。
小柒吃地瓜
2020/04/23
2.8K0
在openEuler环境下快速编译GreatSQL RPM包
安装 rmp-build 包,它会附带安装其他必要的相关依赖包,并同步安装其他必要的软件包,如cmake、gcc等:
老叶茶馆
2024/01/08
2360
在openEuler环境下快速编译GreatSQL RPM包
如何优雅地编译kernel
linux内核有社区版本,升级和发布很快。redhat会选择一个内核版本构建自己的发行版,发行版除了内核还包括众多内核之上的软件如bash/gcc/glibc/systemd/开发库等等,redhat的策略是长期维护,只backport和bugfix升级小版本,并且保证任何backport和bugfix不影响原来的使用场景,比如升级内核小版本原来自己开发的内核模块代码不用修改,但在主线linux内核升级估计就得修改代码,再比如原来生产环境有一些脚本和配置文件,小版本升级后这些脚本和配置不用做任何修改,但不用redhat维护的版本,自己升级开源的版本恐怕升级后这些脚本和配置文件都未必能正常工作,维护周期结束后redhat会对大版本做一次升级,至少这个维护周期生产环境可以正常升级。所以生产环境都用redhat的企业版本linux,centos就是去掉商标后的redhat免费企业版,不想付费就用centos。
惠伟
2021/07/08
1.1K0
RHEL6.5上使用Ambari快速搭建Hadoop集群
ip hostname 10.7.1.1 master.coke 10.7.1.2 dn1.coke 10.7.1.3 dn2.coke 10.7.1.4 dn3.coke 10.7.1.5 dn4.coke
星哥玩云
2022/07/03
4440
相关推荐
CentOS 7上源码包方式安装MySQL5.7.22
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文