IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Server 知识汇集6 : 分组数据 -> 正文阅读

[大数据]Server 知识汇集6 : 分组数据

第6节.分组数据

1.SQL Server Group By语句

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

以下是 Group By 子句的语法:

 select 
     select_list
 from
     table_name
 group by
     column_name1,
     column_name2 ,...;
     

在此查询语法中, Group By 子句为列中的每个值组合生成一个组。
请考虑以下示例:

 select
     customer_id,
     year (order_date) order_year
 from
     sales.orders
 where
     customer_id in (1, 2)
 Group By 
     customer_id;

在查询中添加一个 Group By 子句来查看效果:

 select
     customer_id,
     year (order_date) order_year
 FROM
     sales.orders
 WHERE
     customer_id in (1, 2)
 Group By 
     customer_id,
     year (order_date)
 order by
     customer_id;

2.Group By 子句和聚合函数

Group By 子句通常与聚合函数一起用于统计数据。 聚合函数对组执行计算并返回每个组的唯一值。

例如, count() 函数返回每个组中的行数。 其他常用的聚合函数是: SUM() , AVG() , MIN() , MAX() 。

Group By 子句将行排列成组,聚合函数返回每个组的统计量(总数量,最小值,最大值,平均值,总和等)。

例如,以下查询返回客户按年度下达的订单数:

 select
     customer_id,
     year (order_date) order_year,
     count (order_id) 订单数量
 from
     sales.orders
 where
     customer_id IN (1, 2)
 Group By 
     customer_id,
     year (order_date)
 order by
     customer_id;

如果要引用 Group By 子句中未列出的任何列或表达式,则必须使用该列作为聚合函数的输入。

否则,数据库系统将会提示错误,因为无法保证列或表达式将为每个组返回单个值。

例如,以下查询将失败:

 select
     customer_id,
     year (order_date) order_year,
     order_status
 from
     sales.orders
 where
     customer_id IN (1, 2)
 Group By
     customer_id,
     year (order_date)
 order by
     customer_id;

这是因为 order_status 列未在 Group By子句中

1.带有count()函数示例的Group By子句

以下查询返回每个城市的客户数量:

select
     city,
     count (customer_id) customer_count
 from
     sales.customers
 Group By
     city
 order by
     city;

2.Group By子句带有MIN和MAX函数示例

以下声明返回所有型号年份为 2018 的最低和最高价产品:

 select
     brand_name,
     min (list_price) min_price,
     max (list_price) max_price
 from
     production.products p
     INNER JOIN production.brands b ON b.brand_id = p.brand_id
 where
     model_year = 2018
 Group By
     brand_name
 order by
     brand_name;

3.带有AVG()函数示例的Group By子句

以下语句使用 AVG() 函数返回型号年份为 2018 年的所有产品的平均价格:

select
     brand_name,
     AVG (list_price) avg_price
 from
     production.products p
     inner join production.brands b on b.brand_id = p.brand_id
 where
     model_year = 2018
 Group By
     brand_name
 order by
     brand_name;

4.带有SUM函数示例的Group By子句

以下查询使用 SUM() 函数获取每个订单的总价值:

select
     order_id,
     SUM (quantity * list_price ) net_value
 from
     sales.order_items
 group by
     order_id;

3.SQL Server Having子句

Having子句通常与[Group By]子句一起使用,以根据指定的条件列表过滤分组。

以下是 Having子句 的语法:

select
     select_list
 from
     table_name
 Group By
     group_list
 Having
     conditions;

在此语法中, Group By子句将行汇总为分组, having子句将一个或多个条件应用于这些每个分组。

只有使条件评估为 true的组才会包含在结果中。 换句话说,过滤掉条件评估为 false或 unknown 的 组。

因为SQL Server在Group By子句之后处理 having子句,所以不能通过使用列别名来引用选择列表中指 定的聚合函数。

以下查询将失败:

 select
     column_name1,
     column_name2,
     aggregate_function (column_name3) column_alias
 FROM
     table_name
 Group By
     column_name1,
     column_name2
 having
     column_alias > value;

必须明确使用 having子句中的聚合函数表达式,如下所示:

 select
     column_name1,
     column_name2,
     aggregate_function (column_name3) alias
 from
     table_name
 Group By
     column_name1,
     column_name2
 having
     aggregate_function (column_name3) > value;

1.HAVING子句与COUNT函数示例

以下声明查找每年至少下过两个订单的客户:

 select
     customer_id,
     YEAR (order_date),
     COUNT (order_id) order_count
 from
     sales.orders
 Group By
     customer_id,
     YEAR (order_date)
 having
     count (order_id) >= 2
 order by
     customer_id;

在上面查询示例中,
首先, Group By子句按客户和订单年份对销售订单进行分组。
count() 函数返回每个客户每年 下达的订单数。
其次, having子句筛选出订单数至少为 2 的所有客户。

2.having子句与SUM()函数的例子

以下语句查找净值大于 20000 的销售订单:

 select
     order_id,
     SUM (quantity * list_price * (1 - discount)) net_value
 from
     sales.order_items
 Group By
     order_id
 having
     SUM (
     quantity * list_price * (1 - discount)
     ) > 20000
 order by
     net_value;

在这个例子中:
首先, SUM 函数计算销售订单的净值。
其次, having子句过滤净值小于或等于 20000 的销售订单。

3.having子句与MAX和MIN函数的示例

以下语句首先查找每个产品类别中的最大和最小价格。 然后,它筛选出最大价格大于 4000 或最小价格 小于 500 的类别:

 select
     category_id,
     MAX (list_price) max_list_price,
     MIN (list_price) min_list_price
 from
     production.products
 Group By
     category_id
 having
     MAX (list_price) > 4000 OR MIN (list_price) < 500;

4.having子句与AVG()函数示例

 select
     category_id,
     AVG (list_price) avg_list_price
 from
     production.products
 Group By
     category_id
 having
     AVG (list_price) between 500 and 1000;
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-05-09 12:46:25  更:2022-05-09 12:48:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 23:31:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码