读SQL学习指南(第3版)笔记07_分组和子查询

sas分组计数_SAS读书笔记:SQL 1.SQL语言概述SAS术语与SQL术语的区别SQl语言在SAS中通过PROC SQL来实现。PROC SQL可实现以下功能:制作报表与表;生成一些统计性数据;合并表;从其它表中抽取部分行、列;更新表的行、列;从其它数据管理系统(DBMS)中更新或抽取数据。2.使用SQL检索数据 2.1 SQL的基本结构PROC SQL; SELECT 表1.列1 , 表1.列2 ,``` FR... 阅读详情

 

1. 数据通常以数据库用户所需的最低层级的粒度存储

2. 分组

2.1. 隐式分组

2.1.1. mysql

-> SELECT MAX(amount) max_amt,
    ->   MIN(amount) min_amt,
    ->   AVG(amount) avg_amt,
    ->   SUM(amount) tot_amt,
    ->   COUNT(*) num_payments
    -> FROM payment;
2.1.1.1. 查询返回的每个值都是由聚合函数生成的
2.1.1.2. 没有使用group by子句
2.1.1.3. 只有一个隐式分组
2.1.1.3.1. payment数据表中的所有行

2.2. 显式分组

2.2.1. mysql

-> SELECT customer_id,
    ->   MAX(amount) max_amt,
    ->   MIN(amount) min_amt,
    ->   AVG(amount) avg_amt,
    ->   SUM(amount) tot_amt,
    ->   COUNT(*) num_payments
    -> FROM payment
    -> GROUP BY customer_id;
2.2.1.1. 添加一个group by子句来指定聚合函数应该应用于哪个分组

2.3. 单列分组

2.3.1. 最简单,也是最常用的分组类型

2.3.2. mysql

-> SELECT actor_id, count(*)
    -> FROM film_actor
    -> GROUP BY actor_id;

2.4. 多列分组

2.4.1. 需要跨越多列生成分组

2.4.2. mysql

-> SELECT fa.actor_id, f.rating, count(*)
    -> FROM film_actor fa
    ->   INNER JOIN film f
    ->   ON fa.film_id = f.film_id
    -> GROUP BY fa.actor_id, f.rating
    -> ORDER BY 1,2;

2.5. 通过表达式分组

2.5.1. 根据表达式产生的值构建分组

2.5.2. mysql

-> SELECT extract(YEAR FROM rental_date) year,
    ->   COUNT(*) how_many
    -> FROM rental
    -> GROUP BY extract(YEAR FROM rental_date);

2.6. 分组过滤条件

2.6.1. 由于group by子句是在where子句被评估之后运行的,因此无法为此对where子句增加过滤条件

2.6.2. 无法在where子句中引用聚合函数count(*)

2.6.2.1. 因为在评估where子句时,分组尚未生成,因而必须将分组过滤条件放入having子句

2.6.3. 向包含group by子句的查询中添加过滤条件时,仔细考虑是过滤原始数据(将过滤条件放入where子句),还是过滤分组后的数据(将过滤条件放入having子句)

3. 聚合函数

3.1. 对分组中的所有行执行特定的操作

3.2. max()

3.2.1. 返回集合中的最大值

3.3. min()

3.3.1. 返回集合中的最小值

3.4. avg()

3.4.1. 返回集合中的平均值

3.5. sum()

3.5.1. 返回集合中所有值之和

3.6. count()

3.6.1. 返回集合中所有值的个数

4. 统计不同的值

4.1. mysql

-> SELECT COUNT(customer_id) num_rows,
    ->   COUNT(DISTINCT customer_id) num_customers
    -> FROM payment;

4.2. 通过指定distinct,count()函数检查分组中每个成员的列值,以便查找和删除重复项,而不是简单地计算分组中值的数量

4.3. mysql

-> SELECT COUNT(*) num_rows,
    ->   COUNT(val) num_vals,
    ->   SUM(val) total,
    ->   MAX(val) max_val,
    ->   AVG(val) avg_val
    -> FROM number_tbl;

4.4. count(*)统计行数

4.5. count(val)统计val列包含多少个值并且忽略所有遇到的null值

5. 使用表达式

5.1. mysql

-> SELECT MAX(datediff(return_date,rental_date))
    -> FROM rental;

5.2. 除了使用列作为聚合函数的参数,也可以使用表达式

6. 生成汇总

6.1. 假设在计算每位演员/评级组合的总计数的同时,还想知道不同演员参演的电影总数,这时可以运行一个额外的查询并合并结果

6.2. with rollup选项来让数据库服务器完成这些工作

6.3. mysql

-> SELECT fa.actor_id, f.rating, count(*)
    -> FROM film_actor fa
    ->   INNER JOIN film f
    ->   ON fa.film_id = f.film_id
    -> GROUP BY fa.actor_id, f.rating WITH ROLLUP
    -> ORDER BY 1,2;

6.4. Oracle Database

6.4.1. GROUP BY ROLLUP(fa.actor_id, f.rating)

6.4.2. 可以在group_by子句中对部分列汇总

6.4.3. 如果按照列a、b、c进行分组,可以指示服务器通过下列语句仅对列b和c执行汇总

6.4.3.1. GROUP BY a, ROLLUP(b, c)

6.5. with cube选项

6.5.1. 为分组列的所有可能的组合生成汇总行

6.5.2. MySQL 8.0版并未提供

6.5.3. SQL Server和Oracle Database中可以使

7. 子查询

7.1. 子查询总是被包围在括号中,通常先于包含语句执行

7.2. 子查询像是一个具有语句作用域的临时数据表(这意味着服务器在执行SQL语句后会清空分配给子查询结果的内存)

7.3. 如果不清楚子查询究竟做了什么,可以单独运行子查询(不加括号)并查看返回结果

7.4. 返回的结果集

7.4.1. 单行单列

7.4.2. 多行单列

7.4.2.1. in和not in运算符
7.4.2.1.1. 虽然不能把单个值与一组值进行相等比较,但是可以检查这个值能否包含在一组值中
7.4.2.1.2. mysql
-> SELECT country_id
    -> FROM country
    -> WHERE country IN ('Canada','Mexico');
7.4.2.1.3. mysql
-> SELECT city_id, city
    -> FROM city
    -> WHERE country_id IN
    ->  (SELECT country_id
    ->   FROM country
    ->   WHERE country IN ('Canada','Mexico'));
7.4.2.1.4. sql
SELECT first_name, last_name
FROM customer
WHERE customer_id NOT IN
 (SELECT customer_id
  FROM payment
  WHERE amount = 0)
7.4.2.1.4.1. not in的版本更易于理解
7.4.2.2. all运算符
7.4.2.2.1. 将某个值与集合中的所有值进行比较
7.4.2.2.2. mysql
-> SELECT first_name, last_name
    -> FROM customer
    -> WHERE customer_id <> ALL
    ->  (SELECT customer_id
    ->   FROM payment
    ->   WHERE amount = 0);
7.4.2.3. any运算符
7.4.2.3.1. 允许将单个值与一组值中的各个值进行比较
7.4.2.3.2. 只要有一次比较成立,使用any运算符的条件即为真
7.4.2.3.3. any与in等效
7.4.2.4. 使用not in或<>运算符比较一个值和一组值时,必须确保这组值中不包含null值,这是因为服务器会将表达式左侧的值与组中的各个值进行比较,任何值与null作相等比较时都会产生unknown

7.4.3. 多行多列

7.4.3.1. mysql
-> SELECT fa.actor_id, fa.film_id
    -> FROM film_actor fa
    -> WHERE fa.actor_id IN
    ->  (SELECT actor_id FROM actor WHERE last_name = 'MONROE')
    ->   AND fa.film_id IN
    ->  (SELECT film_id FROM film WHERE rating = 'PG');
7.4.3.2. 可以将两个单列子查询合并成一个多列子查询
7.4.3.3. mysql
-> SELECT actor_id, film_id
    -> FROM film_actor
    -> WHERE (actor_id, film_id) IN
    ->  (SELECT a.actor_id, f.film_id
    ->   FROM actor a
    ->      CROSS JOIN film f
    ->   WHERE a.last_name = 'MONROE'
    ->   AND f.rating = 'PG');
7.4.3.4. 过滤条件必须将film_actor数据表的两列放入括号内
7.4.3.5. 与子查询返回的顺序一致
7.4.3.6. 子查询使用了交叉连接

7.5. 子查询类型

7.5.1. 非关联子查询

7.5.1.1. 子查询完全独立
7.5.1.2. 单独执行,不会引用包含语句中的任何内容

7.5.2. 关联子查询

7.5.2.1. 子查询会引用包含语句中的列
7.5.2.2. 并不是先于包含语句一次性执行完毕,而是为每一个候选行(可能会包含在最终结果中)执行一次
7.5.2.2.1. 如果包含查询返回很多行,将会引发性能问题
7.5.2.3. 在MySQL的delete语句中使用关联子查询时,无论如何都不能使用数据表别名,这就是在子查询中使用数据表全名的原因

7.6. exists运算符

7.6.1. 子查询可能会返回0行、1行或者多行结果,然而条件只是简单地检查子查询是否返回至少1行

7.6.2. 惯例是指定select 1或select

7.6.3. 也可以使用not exists来检查没有返回行的子查询

8. 何时使用子查询

8.1. 子查询作为数据源

8.1.1. 数据加工

8.1.1.1. 如果使用子查询,你就能够遵守仅在有明确的存储新数据的业务需求时才向数据库添加新数据表的原则

8.1.2. 面向任务的子查询

8.1.3. 公用表表达式

8.1.3.1. Common table expression,CTE
8.1.3.2. MySQL 8.0版新引入的特性
8.1.3.3. CTE是一个具名子查询,出现在with子句内查询的顶部,该子句可以包含多个以逗号分隔的CTE
8.1.3.4. 使用临时数据表来存储后续查询要用到的查询结果的替代方案

8.2. 子查询作为表达式生成器

sql超时 sql中存在关键字 in 和 not in 和 <> 和 分组排序和 子查询 代码优化 sql超时 sql中存在关键字 in 和 not in 和 和 分组排序和 子查询 代码优化 阅读详情

相关推荐

SQL学习指南 完整中文版

SQL学习指南 SQL学习指南 SQL学习指南 SQL学习指南 SQL学习指南

读SQL学习指南(第3版)笔记04_查询入门

查询入门

lyingSeven的博客 178

MySQL权威指南(第3版)

MySQL权威指南(第3版),压缩包文件,欢迎下载,11111

读SQL学习指南(第3版)笔记10_元数据与大数据

读SQL学习指南(第3版)笔记10_元数据与大数据

lyingSeven的博客 289

线结构光三维重建(二):光平面标定与激光轮廓提取的实战优化

本文深入探讨了线结构光三维重建中的光平面标定与激光轮廓提取两大核心环节的实战优化。详细介绍了从棋盘格标定板法到自动化高鲁棒性标定的流程优化,并分享了针对复杂工业场景(如低对比度、高反光表面)的激光轮廓提取组合策略,旨在提升三维重建系统的整体精度与稳定性。

weixin_29057237的博客 333

SpringBoot使用mybatis-plus的自动代码生成器

一.SpringBoot使用mybatis-plus+自动代码生成 使用mybatis-plus可以自动帮我们生成通用的 controller,service,dao,mapper 二.加入依赖 <!-- MP 核心库 --> <dependency> <groupId>com.baomidou</groupId> <artif...

农民娃儿的博客 2263

读SQL学习指南(第3版)笔记12_时间函数和分析函数

时间函数和分析函数

lyingSeven的博客 249

Mac电脑安装burp suite2024版本记录

下载最新版本burpsuitloader-XXX-all.jar,改名为burpsuitloader.jar。目录下,修改vmoptions.txt文件,新增以下内容,如果keygen不是这个名称的话,需要修改。,点击license左侧的copy复制它,然后手动从启动台启动burpsuite。,复制如下命令到终端即可(要加双引号,不然目录中空格会导致命令截断)再复制激活响应信息到burpsuite中即可激活。后续运行burp直接从启动台运行即可。将如下框的信息复制到激活器中。输入后下一步,点击手动激活。

墨痕诉清风的博客 903

《SQL学习指南》C3-C4

文章目录C3 简单查询3.1 查询机制3.2 SELECT 子句3.3 FROM 子句3.4 WHERE子句3.5 GROUP BY子句,HAVING子句3.6 ORDER BY子句C4 过滤4.1 条件评估4.1.1 使用圆括号4.1.2 使用not操作符4.2 构建条件4.3 条件类型4.3.1 相等条件4.3.2 范围条件4.3.3 成员条件4.3.4 匹配条件 C3 简单查询 3.1 查询机制 当输入完密码后,服务器一旦通过了对应户名和密码的验证,则为用户建立一个数据库连接,该连接从应用程序

weixin_43541094的博客 377

BoT-SORT实战:手把手教你实现BoT-SORT训练和测试

文章目录摘要1、数据准备2、配置BoT-SORT环境2.1、获取代码2.2、创建虚拟环境2.3、安装必要的包2.3.1、安装pytorch2.3.2、安装cython2.3.3、安装Cython-bbox2.3.4、安装faiss2.3.5、安装其他的包3、训练3.1、生成REID数据集3.2、预训练模型3.2.1、ByteTrack预训练模型3.2.2、REID预训练模型3.3、开始训练4、如何更改FASTREID的BackBone?5、测试5.1、测试视频5.2、测试摄像头5.3、多类别测试 摘要 Bo

m0_47867638的博客 2298

Windows远程桌面开发之九-虚拟显示器(Windows 10 Indirect Display 虚拟显示器驱动开发)

by fanxiushu 2019-06-24 转载或引用请注明原始作者。 这里与远程桌面关系不是太大,但这个部分是xdisp_virt远程控制程序的实现多显示器桌面扩展的子功能,因此也归为远程桌面开发一类。 这篇文章与之前发布的...

fanxiushu的专栏 2万+

SQL学习笔记-分组聚合、子查询、关联操作与窗口函数

sql 牛客网

qq_61788779的博客 2669

《AI编程实战:深度学习模型改进与系统部署》,改进专栏目录和介绍

专深度学习相关项目都写在本专栏,《一次订阅解锁全部,都有源码,永久观看》,包括车牌识别、股票预测、人脸识别、风格迁移、图像修复、图像超分辨重建、图像分割等任务,Web/PyQt系统实现。引入Transformer、Swin Transformer、DenseNet、ViT、ConvNeXt等算法实战,提供卷积改进,魔改对比实验,模型剪枝,模型蒸馏,模型量化,全网独家整合改进专栏,为不同领域的同学发表论文提供了大力支持。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 3270

从数据汇总到高级分析,SQL 查询进阶实战(下篇)—— 分组、子查询与窗口函数全攻略

WHERE 子查询:适用于将子查询结果作为条件,直接筛选主查询数据,语法简洁,适合简单条件判断。FROM 子查询:适用于复杂数据预处理,通过临时表分层处理逻辑,便于维护和性能优化。两者可结合使用,实现更复杂的业务需求(如子查询嵌套、多表关联等)。八、SELECT查询定义SELECT是 SQL 中用于从表中提取数据的基础关键字,所有查询操作均以SELECT开头,决定返回哪些字段及如何展示。(一)、SELECT 查询的基础用法字段选择规则可选择表中所有字段:用表示(如。

学习成长日记 2324

GRCNN抓取网络学习3【自制Jacquard数据集模型调优】

请先完成,这样有利于下面操作的理解!然后第二步是,有了自己的数据集输入到GRCNN中是三种文件,那么可以GRCNN抓取网络学习2【自制Jacquard数据集训练】!既然学会训练,那么开展下一步计划模型调优。GRCNN源码:https://github.com/skumra/robotic-grasping。

vor234的博客 2502

关于瑞芯微SDK中buildroot的架构分析、配置细节、以及一些使用步骤

摘要:瑞芯微SDK基于Buildroot框架,针对RK3568等芯片提供定制化开发环境。核心目录包括buildroot(配置与编译框架)、kernel(定制内核)和u-boot(引导程序)。开发流程为:1)加载芯片默认配置;2)通过menuconfig定制系统(架构、内核、软件包等);3)可选修改内核配置。关键硬件适配需修改设备树(dts)和分区表(parameter.txt),系统行为通过启动脚本(S90network)调整。最终执行make编译生成可烧录固件。该框架通过配置文件驱动,实现从工具链构建到固

Hyjks的博客 1199

SQL分组查询,子查询

1: 分组函数/又称聚集函数1.分组函数(默认情况下就是ALL)AVG (DISTINCT |ALL| n) COUNT (DISTINCT |ALL| expr | *) // NULL不计算,但对数字0计算 MAX (DISTINCT |ALL| expr) MIN (DISTINCT |ALL| expr) SUM (DISTINCT |ALL| n) 2: 分组函数与分组查询

小鱼的专栏 7747

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

SQL语句汇总(三)——聚合函数、分组、子查询及组合查询

拖了一个星期,终于开始写第三篇了。走起! 聚合函数: SQL中提供的聚合函数可以用来统计、求和、求最值等等。 分类: –COUNT:统计行数量 –SUM:获取单个列的合计值 –AVG:计算某个列的平均值 –MAX:计算列的最大值 –MIN:计算列的最小值 首先,创建数据表如下: 执行列、行计数(count): 标准格式 SELECT CO...

weixin_30571465的博客 6759

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

读SQL学习指南(第3版)笔记13_读后总结与感想兼导读

读SQL学习指南(第3版)笔记13_读后总结与感想兼导读

lyingSeven的博客 186

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

面试经常会遇到的SQL中分组函数和子查询

SQL中分组函数和子查询 SQL函数分为字符串函数、数学函数、日期时间函数、分组函数。在这几大SQL函数中分组函数最为重要也是最为常见的函数,其他函数只需大致了解一下就行。 1、字符串函数其实就是对字符串的类型转换、对字符串大小写转换、对字符串的删除和截取以及对字符串的替换。在字符串类型转换中重点注意一下cast和convert类型转换。 2、数学函数就三个函数分别为:round 返回数字表达式并...

weixin_44543219的博客 345

SQL Server中的分组数据和子查询

1.分组数据 SQL Server Group By语句 Group By 从字面意义上理解就是根据“By”指定的规则对数据进行分组,所谓的分组就是将一个“数据集” 划分成若干个“小区域”,然后针 对若干个“小区域”进行数据处理 语法: select st.Sid, st.Sname,AVG(c.score)平均成绩 from sc c join Student st on c.Sid=st.Sid where c.score>=60 group by c.Sid ,st.Sid, st.Snam

xiaosao_的博客 1936

对比Excel学习SQL(5):分组和子查询

今天这篇文章是对比Excel学习SQL系列的第5篇文章,之前3篇的传送门在这里:《计算字段》、《对行和列的操作》、《库/表/记录的增查删改》、《写给小白的SQL学习文章》。本节内容要用到的...

data_cola的博客 447

Oracle 分组函数和子查询

在讲解分组函数之前,也许有人会问,什么是分组函数?分组函数作用于一组数据,并对一组数据返回一个值。 一、数据分组(分组函数) ——max(最大值),min(最小值),avg(平均值),sum(求和),count(求总数) 问题:如何显示所有员工中最高工资和最低工资? select max(sal),min(sal) from emp; 问题:最高工资那个人是谁? 错误写法:select enam...

程序羊的博客 1010

SQL分组数据、查询

一、数据分组 之前的文章的所有计算都是在表的所有数据或匹配特定的WHERE子句的数据上进行的。如果要返回每个供应商提供的产品数目,该怎么办?或者返回只提供一项产品的供应商的产品,或者返回提供10个以上产品的供应商的产品, 怎么办? 这就是分组大显身手的时候了。使用分组可以将数据分为多个逻辑组,对每个组进行聚集计算。 1、创建分组 例: 分析:首先,group by子句指示DBMS按照vend_id的数据相同与否来分组并排序数据。select指定的输出列是vend_id和num_prods(用co

cuicui_ruirui的博客 3704

oracle 同一列数据不同条件分组求和_对比Excel学习SQL(5):分组和子查询

注:文章首发于微信公众号【可乐的数据分析之路】,号内回复“资料”,可免费领取数据分析学习资料大礼包今天这篇文章是对比Excel学习SQL系列的第5篇文章,之前3篇的传送门在这里:《计算字段》、《对行和列的操作》、《库/表/记录的增查删改》、《写给小白的SQL学习文章》。本节内容要用到的数据表:成绩表(sc),学生基本信息表(student1)一、分组01 创建分组group by 命令用来创建分组...

weixin_39980841的博客 1256
上一篇: 读SQL学习指南(第3版)笔记06_连接和集合
下一篇: 读SQL学习指南(第3版)笔记08_视图和索引
躺柒
博客等级 码龄4年 7004粉丝 1321原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值