前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SQL Server 数据库设计--SELECT高级查询语句之三

SQL Server 数据库设计--SELECT高级查询语句之三

作者头像
剑指工控
发布2021-11-09 10:16:16
1.3K0
发布2021-11-09 10:16:16
举报
文章被收录于专栏:剑指工控

JZGKCHINA

工控技术分享平台

在上2篇文章中介绍了SQL SERVER的SELECT语句的简单使用方法《SQL Server 数据库设计--SELECT语句》《SQL Server 数据库设计--SELECT语句之二》,这篇文章继续介绍其他高级查询方法。

首先要介绍的就是分组查询。比如我们有一个销售订单,这个订单里包含了地域,人员等多个不同的字段信息,我们需要按照地域进行分组查询每个地域的总销售额。或者要按照人员查询每个人的销售总额等信息,那么就需要用到这个分组查询的功能。

  1. 分组查询 GROUP BY

使用 GROUP BY 根据一个或者多个列对结果进行分类汇总,通常和统计函数一起使用,常用的统计类函数有:

代码语言:javascript
复制
COUNT(统计组中项数) / COUNT (*),SUM,AVG,MAX,MIN等。

语法结构如下:

代码语言:javascript
复制
SELECT column_name,
aggregate_function(column_name)
FROM table_name
WHERE search_condition
GROUP BY group_by_expression;

示范数据库表:

GROUP BY 实例:查询各个城市总的销售额是多少;

代码语言:javascript
复制
SELECT Country, SUM(sales) AS TotalSales FROM Sales GROUP BY Country;

查询结果如下:

从上面我们可以看出,GROUP BY 将城市名称相同的销售额聚集在一起,然后通过 SUM() 聚合函数计算出他们的总和。

重点:GROUP BY 主要作用是用来进行分组聚合查询,有时候会用来进行排重,与 DISTINCT 关键字作用类似。常与 HAVING 关键字一起使用,用来对分组结果进行筛选。

注意:GROUP BY 子句中必须保证 SELECT 语句后列值是可计算的或者在 GROUP BY 列表中。

下面语句会报错:

代码语言:javascript
复制
SELECT Country, Region, SUM(sales) AS TotalSales FROM Sales GROUP BY Country;

2. 统计查询 HAVING

筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用 having 条件过滤出特定的组,也可以使用多个分组标准进行分组。

语法结构如下:

代码语言:javascript
复制
SELECT column_name,
aggregate_function(column_name)
FROM table_name
WHERE search_condition
GROUP BY group_by_expression
HAVING search_condition
ORDER BY order_ expression [ASC] | [DESC] ;

示范数据库表:

HAVING 实例:

1)以城市进行分组查询总的销售额是多少并以城市为“Canada”组为过滤条件;

代码语言:javascript
复制
SELECT Country, SUM(sales) AS TotalSales FROM Sales
GROUP BY Country
HAVING Country = 'Canada'

2)以城市进行分组查询总的销售额是多少并以累计销售额大于100为过滤条件;

代码语言:javascript
复制
SELECT Country, SUM(sales) AS TotalSales FROM Sales
GROUP BY Country
HAVING SUM(sales) > 300

从上面可以看出通过 HAVING 进行过滤后,查询到的结果和第一项中查询到的结果不同了。

那么 WHERE 也是过滤条件,它和 HAVING 有什么区别呢?

区别:where 子句的作用是在对查询结果进行分组前,将不符合 where 条件的行去掉,即在分组之前过滤数据,where 条件中不能包含聚组函数,使用 where 条件过滤出特定的行。

那么我们来看看以下两条语句的区别:

代码语言:javascript
复制
SELECT Country, Region, SUM(sales) AS TotalSales FROM Sales
GROUP BY Country, Region
HAVING SUM(sales) >= 100;
代码语言:javascript
复制
SELECT Country, Region, SUM(sales) AS TotalSales FROM Sales
WHERE Country ='Canada'
GROUP BY Country, Region
HAVING SUM(sales) >= 100;

姿势已摆好

就等你点啦

作者简介

剑控老罗

具有10年工业自动化领域SCADA,DCS,PLC等项目实施经验,熟悉石化行业,油田数字化行业,熟悉多个品牌PLC,HMI,SCADA,数据库等。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-12-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 剑指工控 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档