文档章节

sql for sql server_ group by 详解

空城里的往日时光
 空城里的往日时光
发布于 2017/02/08 16:09
字数 545
阅读 28
收藏 0

本节主要讲解group by的基本用法:

如果要用到group by 一般用到的就是“每这个字” 例如说明现在有一个这样的表:每个部门有多少人 就要用到分组的技术。

group by (分组查询)的字面意思是根据一定的依据将一个数据集进行分组。其有一个原则,就是select后面的字段若不使用聚合函数,则必须出现在group by后面(必须!!!)。

例如,如下数据库表table:   

A B
a 1
b 1
b 1
c 2

要求:每个A中有多少个B?

错误sql:select A ,B from table group by A要求:(B既不在聚合函数中,也不在group by后面)

正确sql:select A,count(B) as number from table group by A

结果集:

A number
a 1
b 2
c 1

 

除了以上基础外,在使用group by的过程中还会遇到使用where和having进行条件筛选的情况,下面我们来介绍下它们的具体用法:

 

having子句是筛选分组后的各组数据,where子句是分组前先筛选记录,其作用在GROUP BY 子句和HAVING子句前。having子句限制的是组,而不是行,where筛选的是行记录。

 下面举例说明,如上文给出的示例:

     select A,count(B) as number from table where B !=2 group by A

 where字句在分组之前执行,排除 A=c的记录,结果如下表,

A number
a 1
b 2

      select A,count(B) as number from table  group by A  having  count(B) =1

     having在分组之后执行,只保留number=1的组,结果如下表,

A number
a 1
c 1

总结:在同时包含where和having字句的group by语句中,各语句的执行顺序是:

    执行where子句查找符合条件的数据--->使用group by 子句对数据进行分组--->对group by 子句形成的组运行聚集函数计算每一组的值--->最后用having 子句去掉不符合条件的组

最后一个小问题--->分组排序问题--->在group by分组的基础上用order by 排序 (ASC升序、DESC降序)

 

© 著作权归作者所有

空城里的往日时光
粉丝 1
博文 11
码字总数 5344
作品 0
青岛
程序员
私信 提问
sethink/swoole-orm

swoole-orm 基于swoole的mysql协程连接池,简单封装。 实现多个协程间共用同一个协程客户端 引入 >composer require sethink/swoole-orm 入门例子...

sethink
2018/12/19
0
0
SQL查询中行列转换 Pivot UnPivot,行显转列显

PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PIVOT(聚合函数(列) FOR 列 in (…) )AS P 完整语法: UNPIVOT用于将列明转为...

习惯了-想你
2016/11/29
66
0
[AlwaysOn Availability Groups]排查:AG配置

排查AG配置 本文主要用来帮助排查在AG配置时出现的问题,包括,AG功能被禁用,账号配置不正确,数据库镜像endpoint不存在,endpoint不能访问。 Section Description AlwaysOn Availability ...

技术小胖子
2017/11/14
0
0
Oracle group by 用法实例详解

1. Group by的语法 Select [filed1,fild2,]聚合函数(filed), [Grouping(filed),] [Grouping_id(filed1,filed2,…)] From tablename Where condition [Group by {rollup|cube}(filed,filed......

rudy_gao
2013/10/25
0
0
SQL Server有这些属性吗

Navicat for SQL Server是一个全面的图形化方式管理数据库,可进行创建、编辑和删除全部数据库对象,例如表、视图、函数、索引和触发器,或运行SQL查询和脚本,查看或编辑BLOBs、HEX、ER图表...

Navicat数据库管理工具
2016/07/14
15
0

没有更多内容

加载失败,请刷新页面

加载更多

OpenStack 简介和几种安装方式总结

OpenStack :是一个由NASA和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目。项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenSta...

小海bug
昨天
6
0
DDD(五)

1、引言 之前学习了解了DDD中实体这一概念,那么接下来需要了解的就是值对象、唯一标识。值对象,值就是数字1、2、3,字符串“1”,“2”,“3”,值时对象的特征,对象是一个事物的具体描述...

MrYuZixian
昨天
6
0
数据库中间件MyCat

什么是MyCat? 查看官网的介绍是这样说的 一个彻底开源的,面向企业应用开发的大数据库集群 支持事务、ACID、可以替代MySQL的加强版数据库 一个可以视为MySQL集群的企业级数据库,用来替代昂贵...

沉浮_
昨天
6
0
解决Mac下VSCode打开zsh乱码

1.乱码问题 iTerm2终端使用Zsh,并且配置Zsh主题,该主题主题需要安装字体来支持箭头效果,在iTerm2中设置这个字体,但是VSCode里这个箭头还是显示乱码。 iTerm2展示如下: VSCode展示如下: 2...

HelloDeveloper
昨天
7
0
常用物流快递单号查询接口种类及对接方法

目前快递查询接口有两种方式可以对接,一是和顺丰、圆通、中通、天天、韵达、德邦这些快递公司一一对接接口,二是和快递鸟这样第三方集成接口一次性对接多家常用快递。第一种耗费时间长,但是...

程序的小猿
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部