聚合函数

sql 聚合函数 测试实验笔记

浪尽此生 提交于 2020-04-07 05:59:04
聚合函数是对一组值执行计算并返回单一的值的函数,它经常与SELECT语句的GROUP BY子句一同使用 我们 每个订单 都需要对应一个 订单的类型 同时 订单 可以有多个 货品 执行一下语句 创建基本测试需求 DROP TABLE IF EXISTS my_order_item; DROP TABLE IF EXISTS my_item; DROP TABLE IF EXISTS my_order; DROP TABLE IF EXISTS order_type; -- 创建订单类型 create TABLE order_type( id int primary key auto_increment, name char(20) ); -- 创建订单 create TABLE my_order( id int primary key auto_increment, order_type_id INT, FOREIGN KEY keyOrderTYpe (order_type_id) REFERENCES order_type(id) ); -- 创建商品 create TABLE my_item( id int primary key auto_increment, name char(20), price INT ); -- 创建订单 与 商品关系维护 create TABLE

T-SQL查询进阶--深入浅出视图

喜你入骨 提交于 2020-04-01 02:10:05
简介 视图可以看作定义在SQL Server上的虚拟表.视图正如其名字的含义一样,是另一种查看数据的入口.常规视图本身并不存储实际的数据,而仅仅存储一个Select语句和所涉及表的metadata. 视图简单的理解如下: 通过视图,客户端不再需要知道底层table的表结构及其之间的关系。视图提供了一个统一访问数据的接口。 为什么要使用视图(View) 从而我们不难发现,使用视图将会得到如下好处: 视图隐藏了底层的表结构,简化了数据访问操作 因为隐藏了底层的表结构,所以大大加强了安全性,用户只能看到视图提供的数据 使用视图,方便了权限管理,让用户对视图有权限而不是对底层表有权限进一步加强了安全性 视图提供了一个用户访问的接口,当底层表改变后,改变视图的语句来进行适应,使已经建立在这个视图上客户端程序不受影响 视图(View)的分类 视图在SQL中可以分为三类 普通视图(Regular View) 索引视图(Indexed View) 分割视图(Partitioned View) 下面从这几种视图类型来谈视图 普通视图(Rugular View) 普通视图由一个Select语句所定义,视图仅仅包含其定义和被引用表的metadata.并不实际存储数据。MSDN中创建视图的模版如下: CREATE VIEW [ schema_name . ] view_name [ (column [ ,

T-SQL查询进阶--深入浅出视图

血红的双手。 提交于 2020-03-23 12:08:17
视图可以看作定义在SQL Server上的虚拟表.视图正如其名字的含义一样,是另一种查看数据的入口.常规视图本身并不存储实际的数据,而仅仅存储一个Select语句和所涉及表的metadata. 视图简单的理解如下: 通过视图,客户端不再需要知道底层table的表结构及其之间的关系。视图提供了一个统一访问数据的接口。 为什么要使用视图(View) 从而我们不难发现,使用视图将会得到如下好处: 视图隐藏了底层的表结构,简化了数据访问操作 因为隐藏了底层的表结构,所以大大加强了安全性,用户只能看到视图提供的数据 使用视图,方便了权限管理,让用户对视图有权限而不是对底层表有权限进一步加强了安全性 视图提供了一个用户访问的接口,当底层表改变后,改变视图的语句来进行适应,使已经建立在这个视图上客户端程序不受影响 视图(View)的分类 视图在SQL中可以分为三类 普通视图(Regular View) 索引视图(Indexed View) 分割视图(Partitioned View) 下面从这几种视图类型来谈视图 普通视图(Rugular View) 普通视图由一个Select语句所定义,视图仅仅包含其定义和被引用表的metadata.并不实际存储数据。MSDN中创建视图的模版如下: CREATE VIEW [ schema_name . ] view_name [ (column [ ,..

SQL语句中order_by_、group_by_、having的用法区别

坚强是说给别人听的谎言 提交于 2020-03-19 08:07:47
order by 从英文里理解就是行的排序方式,默认的为升序。 order by 后面必须列出排序的字段名,可以是多个字段名。 group by 从英文里理解就是分组。必须有“聚合函数”来配合才能使用,使用时至少需要一个分组标志字段。 什么是“聚合函数”? 像sum()、count()、avg()等都是“聚合函数” 使用group by 的目的就是要将数据分类汇总。 一般如: select 单位名称,count(职工id),sum(职工工资) form [某表] group by 单位名称 这样的运行结果就是以“单位名称”为分类标志统计各单位的职工人数和工资总额。 在sql命令格式使用的先后顺序上,group by 先于 order by。 select 命令的标准格式如下: 1 SELECT select_list 2 [ INTO new_table ] 3 FROM table_source 4 [ WHERE search_condition ] 5 [ GROUP BY group_by_expression ] 6 [ HAVING search_condition ] 1. GROUP BY 是分组查询, 一般 GROUP BY 是和聚合函数配合使用 group by 有一个原则,就是 select 后面的所有列中,没有使用聚合函数的列,必须出现在 group by

SQL语句:Group By总结

こ雲淡風輕ζ 提交于 2020-03-19 02:41:19
1. Group By 语句简介: Group By 语句从英文的字面意义上理解就是 “ 根据 (by) 一定的规则进行分组 (Group)” 。它的作用是通过一定的规则将一个数据集划分成若干个小的区域,然后针对若干个小区域进行数据处理。 P.S. 这里真是体会到了一个好的命名的力量, Group By 从字面是直接去理解是非常好理解的。恩,以后在命名的环节一定要加把劲 :) 。话题扯远了。 2. Group By 的使用: 上面已经给出了对 Group By 语句的理解。基于这个理解和 SQL Server 2000 的联机帮助,下面对 Group By 语句的各种典型使用进行依次列举说明。 2.1 Group By [Expressions]: 这个恐怕是 Group By 语句最常见的用法了, Group By + [ 分组字段 ]( 可以有多个 ) 。在执行了这个操作以后,数据集将根据分组字段的值将一个数据集划分成各个不同的小组。比如有如下数据集, 其中水果名称 (FruitName) 和出产国家 (ProductPlace) 为联合主键 : FruitName ProductPlace Price Apple China $1.1 Apple Japan $2.1 Apple USA $2.5 Orange China $0.8 Banana China $3.1

MySQL 聚合函数、运算符操作、约束、表的复制

让人想犯罪 __ 提交于 2020-03-18 23:09:38
1、聚合函数 1、分类    avg (字段名) : 求该字段平均值    sum (字段名) : 求和    max (字段名) : 最大值    min (字段名) : 最小值    count (字段名) : 统计该字段记录的个数 2、示例   1、攻击力最强值是多少      select max(gongji) from MOSHOU.sanguo;   2、统计id 、name 两个字段分别有几条记录      select count(id),count(name) from sanguo;     ## 空值 NULL 不会被统计,""会被统计   3、计算蜀国英雄的总攻击力     select sum(gongji) from MOSHOU.sanguo     where country="蜀国";   4、统计蜀国英雄中攻击值大于200的英雄的数量      select count(*) from MOSHOU.sanguo     where gongji>200 and country="蜀国"; 4、运算符操作 1、数值比较/字符比较     1、数值比较 := != > >= < <=     2、字符比较 := !=     3、练习       1、查找攻击力高于150的英雄的名字和攻击值         select name,gongji

SQL中GROUP BY的用法

ぐ巨炮叔叔 提交于 2020-03-15 07:52:47
GROUP BY 是分组查询, 一般 GROUP BY 是和 聚合函数配合使用,你可以想想 你用了GROUP BY 按 ITEM.ITEMNUM 这个字段分组,那其他字段内容不同,变成一对多又改如何显示呢,比如下面所示 A B 1 abc 1 bcd 1 asdfg select A,B from table group by A 你说这样查出来是什么结果, A B abc 1 bcd asdfg 右边3条如何变成一条,所以需要用到聚合函数,比如 select A,count(B) 数量 from table group by A 这样的结果就是 A 数量 1 3 group by 有一个原则,就是 select 后面的所有列中,没有使用聚合函数的列,必须出现在 group by 后面 来源: https://www.cnblogs.com/dnxf/p/3905083.html

T-SQL查询进阶--深入浅出视图

纵然是瞬间 提交于 2020-03-13 12:58:11
视图可以看作定义在SQL Server上的虚拟表.视图正如其名字的含义一样,是另一种查看数据的入口.常规视图本身并不存储实际的数据,而仅仅存储一个Select语句和所涉及表的metadata. 视图简单的理解如下: 通过视图,客户端不再需要知道底层table的表结构及其之间的关系。视图提供了一个统一访问数据的接口。 为什么要使用视图(View) 从而我们不难发现,使用视图将会得到如下好处: 视图隐藏了底层的表结构,简化了数据访问操作 因为隐藏了底层的表结构,所以大大加强了安全性,用户只能看到视图提供的数据 使用视图,方便了权限管理,让用户对视图有权限而不是对底层表有权限进一步加强了安全性 视图提供了一个用户访问的接口,当底层表改变后,改变视图的语句来进行适应,使已经建立在这个视图上客户端程序不受影响 视图(View)的分类 视图在SQL中可以分为三类 普通视图(Regular View) 索引视图(Indexed View) 分割视图(Partitioned View) 下面从这几种视图类型来谈视图 普通视图(Rugular View) 普通视图由一个Select语句所定义,视图仅仅包含其定义和被引用表的metadata.并不实际存储数据。MSDN中创建视图的模版如下: CREATE VIEW [ schema_name . ] view_name [ (column [ ,..

SQL Server:PARTITION BY和GROUP BY之间的区别

谁都会走 提交于 2020-03-11 21:47:10
多年来,我一直在使用 GROUP BY 来处理所有类型的聚合查询。 最近,我一直在反向设计一些使用 PARTITION BY 来执行聚合的代码。 在阅读我可以找到的关于 PARTITION BY 所有文档时,它听起来很像 GROUP BY ,可能还添加了一些额外的功能? 它们是相同通用功能的两个版本,还是它们完全不同? #1楼 据我所知,Partition By几乎与Group By相同,但有以下不同之处: 该组实际上对结果集进行分组,每组返回一行,这导致SQL Server只允许在SELECT列表中允许聚合函数或属于group by子句的列(在这种情况下,SQL Server可以保证有唯一的每组的结果)。 考虑例如MySQL允许在SELECT列表中具有未在Group By子句中定义的列,在这种情况下,每个组仍然返回一行,但是如果列没有唯一结果,则无法保证什么是输出! 但是使用Partition By,虽然函数的结果与Group By的聚合函数的结果相同,但仍然得到正常的结果集,这意味着每个底层行获得一行,而不是每行一行group,因此,SELECT列表中的每个组都可以包含不唯一的列。 因此,作为摘要,当需要每组输出一行时,分组依据是最佳的,当需要所有行但仍希望基于组的聚合函数时,分区依据是最佳的。 当然也可能存在性能问题,请参阅 http://social.msdn

MYSQL普通查询

六眼飞鱼酱① 提交于 2020-03-08 16:39:39
MYSQL普通查询 一、聚合函数(聚合查询) 函数名 功能 avg(字段名) 求指定字段的平均值 max(字段名) 求指定字段的最大值 min(字段名) 求指定字段的最小值 sum(字段名) 求指定字段的记录和 count(字段名) 求指定字段的记录的个数 聚合函数使用语法:select 聚合函数1,聚合函数2 from 表名; 注意:select name,max(attack) from sanguo;聚合函数在默认情况下是不能与其他列一起做查询的 表名sanguo id name attack defense gender country 1 诸葛亮 102 3 m 蜀国 2 司马懿 110 60 m 吴国 3 貂蝉 120 33 w 蜀国 4 张飞 190 90 m 魏国 5 赵云 106 60 m 吴国 案例1:找出sanguo表中最大的攻击力值是多少 select max(attack) from sanguo ; select max(attack) as '最大攻击力' from sanguo ; 案例2:表中共有多少个英雄? select count(name) as number from sanguo;//如果name是null 查到的数据将不会有null的数据 select count(*) as '英雄个数' from sanguo;//*是这一行