聚合函数

聚合查询、聚合函数

时间秒杀一切 提交于 2019-12-02 11:32:50
聚合查询、聚合函数 用法: from django.db.models import Avg,Sum,Max,Count,Min 聚合: 示例: models.Book.object.all().aggregate(Avg("price")) 你也可以在聚合子句中用它 models.Book.object.aggregate(average_price=Avg('price')) 你也可以连续的使用 models.Bool.object.all().aggregate(Avg("price"),Max("price"),Min("price")) 分组查询 统计每一本书的作者的个数 models.Book.object.all().annotate(author_num=Count("author")) 统计出每个出版社卖的最便宜的书的价格 sss 统计不止一个作者的书 models.Book.object.annotate(author_num=Count("author")).filter(author_num__get=1) 查询各个作者出的书的总价格 models.Author.object.annotate(sum_price=Sum("book__price")).values("name","sum_price") 总结

MySQL的count聚合函数小测试

。_饼干妹妹 提交于 2019-12-02 11:14:11
表是这样,从https://blog.csdn.net/wcnmlgb888/article/details/82712752这篇批量插入mysql数据这拿来的,然后添加了个可以为空的xxx字段,把id主键清掉了,表里50万数据。 现在没有主键,count(id)、count(*)和count(1)比较 几乎三者没有差别,https://www.cnblogs.com/aflyun/p/10982377.html这篇里说如果字段不为null,那么count(字段)会自动优化为count(*),官方手册中提出count(*)和count(1)是等价的。 所以说,只要字段不为null,怎么用都是count(*) 根据可以为空的字段xxx查询 可以看到速度变慢了,中途还有几个波动比较大的0.27 0.25 虽然并没有太多比较性,但是还是需要尽量避免字段为空。 现在给id加上主键索引。 再次比较count(id)、count(*)和count(1) 再来一个用可以为空的xxx字段查询的 总结:有无索引根据非空字段查询都最慢,有索引快过无索引,总之,一般情况一直用count(*)就好。 来源: https://www.cnblogs.com/darkclouds/p/11742842.html

关于Oracle和PL/SQL的学习记录4

我只是一个虾纸丫 提交于 2019-12-02 05:26:22
------数据查询中函数的使用------ 1.count函数-聚合函数 select count(sdept) from stu where sdept like '12计算机'; select count(*) from stu where sdept = '12计算机'; count函数通常与关键字distinct一起使用,关键字distinct用于消除重复记录,与关键字dsitinct一起使用可以统计表中不重复的记录个数 关键字distinct应该写在count()函数里面,并就其中不重复的列进行统计,不能使用*,否则会报错 2.sum函数-聚合函数 select sum(salary) from Salary; sum函数只能对数值数据类型的列求和; sum函数也支持distinct关键字,如果使用distinct关键字,则统计汇总的总工资是消除了重复记录的数目; 3.avg函数-聚合函数 select avg(salary) from Salary; avg函数只允许对数值型数据进行操作 4.max函数-聚合函数 select max(sage) 男生最大年龄 from stu where sgender = '男'; max函数可以用于非数值的数据中: select max(sname) from stu; 系统返回的是姓名sname字段的字符串最大值

SQL窗口函数

大城市里の小女人 提交于 2019-12-01 13:55:21
在开窗函数出现之前存在着很多用 SQL 语句很难解决的问题,很多都要通过复杂的相关子查询或者存储过程来完成。为了解决这些问题,在2003年ISO SQL标准加入了开窗函数,开窗函数的使用使得这些经典的难题可以被轻松的解决。目前在 MSSQLServer、Oracle、DB2 等主流数据库中都提供了对开窗函数的支持,不过非常遗憾的是 MYSQL 暂时还未对开窗函数给予支持。 为了更加清楚地理解,我们来建表并进行相关的查询(截图为MSSQLServer中的结果) MYSQL,MSSQLServer,DB2: CREATE TABLE T_Person ( FName VARCHAR ( 20 ), FCity VARCHAR ( 20 ), FAge INT , FSalary INT ) Oracle: CREATE TABLE T_Person ( FName VARCHAR2( 20 ), FCity VARCHAR2( 20 ), FAge INT , FSalary INT ) 注:以下结果只在MSSQLServer中演示。 T_Person 表保存了人员信息,FName 字段为人员姓名,FCity 字段为人员所在的城市名,FAge 字段为人员年龄,FSalary 字段为人员工资。然后执行下面的SQL语句向 T_Person表中插入一些演示数据: INSERT INTO T

MYSQL窗口函数用法及区别

佐手、 提交于 2019-12-01 13:53:49
本博客转自: https://blog.csdn.net/weixin_34384915/article/details/87551597 窗口函数(OLAP 实时分析处理函数) ,可以一般聚合函数无法实现的高级操作。诸如排序、生成序列号等功能。目前 DBMS 逐步都完成了对窗口函数的支持,唯独 MySql 不支持(但是 Mysql 8 开始支持了)。 1. 窗口函数语法: <窗口函数> OVER ([PARTITION BY <列清单>] ORDER BY <排序用列清单>) 语法解释: 窗口函数分两类 (1.能够作为窗口函数的聚合函数 2.RANK、DENSE_RANK、ROW_NUMBER 等专用窗口函数) PARTITION BY : 设定排序的对象范围 ORDER BY : 指定按照哪一列、何种顺序进行排序 2. 专有开窗之一 (RANK函数)、快速了解开窗函数使用 RANK函数 : 用于计算记录排序的函数 例子表 需求: 根据不同的商品种类(product_type),按照销售单价(sale_price) 从低到高的顺序排序 ? 答案解析 总结 :PARTITION BY 横向对表进行分组、ORDER BY 决定纵向排序的规则。通过 PARTITION BY 分组后的集合称为窗口。 2.1 不使用 PARTITION BY 情况下: 例子

Oracle学习笔记:窗口函数

心已入冬 提交于 2019-12-01 10:06:34
目录 1.测试数据 2.聚合函数+over() 3.partition by子句 4.order by子句 5.序列函数 5.1 分析函数之 ntile 5.2 分析函数之 row_number 5.3 分析函数之 lag、lead 5.4 分析函数之 first_value、last_value SQL中的聚合函数,顾名思义是聚集合并的意思,是对某个范围内的数值进行聚合,聚合后的结果是一个值或是各个类别对应的值。直接聚合得到的结果是所有数据合并,分组聚合(group by)得到的结果是分组合并。 这种聚合函数得到的数据行数是小于基础数据行数的,但是我们经常会有这样的需求,就是既希望看基础数据同时也希望查看聚合后的数据,这个时候聚合函数就满足不了我们了,窗口函数就派上用场了。窗口函数就是既可以显示原始基础数据也可以显示聚合数据。 1.测试数据 学习当然不能凭空想象,需要大量的实践来提高学习效果。 先编排测试数据。 -- 创建测试表 create table temp_cwh_window ( shopname varchar(10), sales number, date2 date ); -- 插入数据 insert into temp_cwh_window values('淘宝','50',to_date('20191013','yyyymmdd')); insert into

MySQL 05章_模糊查询和聚合函数

拥有回忆 提交于 2019-12-01 07:44:46
在之前的查询都需要对查询的关机中进行“精确”、“完整”完整的输入才能查询相应的结果, 但在实际开发过程中,通常需要考虑用户可能不知道“精确”、“完整”的关键字, 那么就需要提供一种不太严格的查询方式,即模糊查询,只需要输入大概的部分内容就能完成查询。 一、模糊查询 1、使用LIKE关键字 语法:SELECT <字段列表|*> FROM 表名 [WHERE 字段名 LIKE %关键字%]; 说明:通配符_(表示任意0到1个字符)、%(表示任意的0到多个字符) 举例:SELECT * FROM tb_student WHERE student_name LIKE '%娘%' OR phone LIKE '%娘%' OR address LIKE '%娘%' OR email LIKE '%娘%'; 2、使用BETWEEN END关键字 语法:SELECT <字段列表|*> FROM 表名 [WHERE 字段名 BETWEEN 起始值 AND 终止值]; 说明:“起始值”和“终止值”都包含 举例:SELECT * FROM tb_score WHERE student_score >=80 AND student_score <= 90; SELECT * FROM tb_score WHERE student_score BETWEEN 80 AND 90; 3、使用IN关键字 语法

where中不能使用聚合函数

你说的曾经没有我的故事 提交于 2019-11-30 23:54:01
select sex,count(*) from table where count(*)>5 报错 sql语句的执行过程是: from-->where-->group by -->having --> select--- >order by; 聚合函数针对结果集,where并不是在结果集后运行。 having针对结果集,把聚合函数放在having之后。 select sex,count(*) from table having count(*)>5 来源: https://www.cnblogs.com/linyuansun/p/11645122.html

数据库基础操作

浪子不回头ぞ 提交于 2019-11-30 19:18:11
<!doctype html>zuoye 目录 1.数据操作 1.1 增:insert 1.2 删:delete 1.3 改:update 1.4 编码问题 2. 单表查询 2.1 基础查询 2.2 拼接concat 2.3 where语句 2.4 聚合函数 2.5 分组 group by 2.6 过滤 having 2.7 排序 order by 2.8 limit的使用 数据库中的数据操作以及单表操作 1.数据操作 1.1:增insert insert into 表名 values(1,'alex',23,'female',2.2,'linux,python'), (1,'alex',23,'female',2.2,'linux,python'); insert into 表名(id,name) values(5,'wusir'),(6,'wusir'); ​ insert into emp2 select * from emp; 将emp的数据导入到emp2里 ​ insert into emp2(id,name) select id,name from emp;将emp的id和name导入到emp2里 1.2.删:delete delete from 表名 where 条件 删除一行数据 1.3.改:update update 表 set 字段1=值1,字段2=值2

oracle--分组查询与子查询

混江龙づ霸主 提交于 2019-11-30 19:09:18
八、分组查询 select 分组字段1,分组字段2 , 聚合函数() from 表名 group by 分组字段1,分组字段2 having 条件 order by 分组字段/聚合函数; select 分组字段1,分组字段2 , 聚合函数() from 表名 where 条件表达式 group by 分组字段1,分组字段2 order by 分组字段/聚合函数; 条件表达式:不能出现聚合函数 条件 :可以出现聚合函数 select grades, sex, count(*) from stu group by grades, sex; select grades, max(mathe) from stu group by grades; --1.如果有分组:select 与from之间只能出现:分组字段名与聚合函数 --2.如果分组,又排序:排序只能出现:分组字段名与聚合函数 --3.如查分组,条件语句为:having , having中只能出现: 分组字段名与聚合函数, 只能在 group by 的后面 --4.如果分组中使where做为条件语句,where中只能出现:分组字段名 select grades, max(age) from stu group by grades having max(age)>30 order by max(age) select grades,