MySQL表的基本查询下/分组聚合统计

1,update

对查询到的结果进行列值更新,可以和older by,where,limit合并使用,为了方便讲解,将会以题目练习的方式进行说明:

1,将孙悟空同学的数学成绩变更为 80 分

本道题和where联用:

2,将曹孟德同学的数学成绩变更为 60 分,语文成绩变更为 70 分

一次更新多列

3,将总成绩倒数前三的 3 位同学的数学成绩加上 30 分

这道题将联用order by和limit:

在图中可以看到,updete不支持math += 30这种写法。

4,将所有同学的语文成绩提升为原来的两倍

不用where语句就可以,但是强烈不建议这么做,改全表数据代价太大了。

2,delete

语法:

delete from + 表名,+(order by ,limit,where)语句联用

案例:

1,删除孙悟空同学的考试成绩

 2,删除整张表数据

删除表的方法一定要慎重使用,表删了就没了,删之前最好做好备份:

可以看到表中的数据被删了,但是表还在。

3,截断表

语法:

truncate + 表名;

注意:这个操作慎用 1. 只能对整表操作,不能像 DELETE 一样针对部分数据操作;

2. 实际上 MySQL 不对数据操作,所以比 DELETE 更快,但是TRUNCATE在删除数据的时候,并不经过真正的事 物,所以无法回滚

3. 会重置 AUTO_INCREMENT 项

3,插入查询结果

语法:

INSERT INTO table_name [(column [, column ...])] SELECT 。。。;

4,聚合函数

 MySQL中可以有函数,可以一组一组的来对结果做聚合统计

具体函数如下:

案例:

1,统计班级共有多少同学

也可以使用列名做统计

2,统计本次考试的数学成绩分数个数

该方法中可以引入去重:

3,统计数学成绩总分

这里使用sum函数:

可以用sum/count的方式来获取平均分:

4,统计平均总分

除了上面提供的统计平均分的方法,mysql也提供了函数avg来完成平均分的计算:

5,返回英语最高分

这里可以用到max函数来辅助完成:

6,返回 > 70 分以上的数学最低分

这可以min和where联用:

5,group by子句的使用/分组聚合统计

实际上,用到该列的不同行的数据来分组,分组的条件由用户定,组内数据一定是相同的,可被聚合压缩。

分组不就是按照条件,拆成了多个组进行各自组内的统计

换句话说就是,分组就是分表,不就是把一张表按条件在逻辑上拆成了多个子表,然后分别对各自子表进行聚合统计

在select中使用group by 子句可以对指定列进行分组查询

语法:

select column1, column2, .. from table group by column;

直接用案例来看更好看:

1,首先我们先用一个表来练习,具体代码如下:

-------------------------------------------------------------------------------------------------------------------------------

DROP database IF EXISTS `scott`;

CREATE database IF NOT EXISTS `scott` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_c    i;

USE `scott`;

 DROP TABLE IF EXISTS `dept`;

 CREATE TABLE `dept` (

   `deptno` int(2) unsigned zerofill NOT NULL COMMENT '部门编号',

   `dname` varchar(14) DEFAULT NULL COMMENT '部门名称',

   `loc` varchar(13) DEFAULT NULL COMMENT '部门所在地点'

 );

 DROP TABLE IF EXISTS `emp`;

 CREATE TABLE `emp` (

   `empno` int(6) unsigned zerofill NOT NULL COMMENT '雇员编号',

   `ename` varchar(10) DEFAULT NULL COMMENT '雇员姓名',

   `job` varchar(9) DEFAULT NULL COMMENT '雇员职位',

   `mgr` int(4) unsigned zerofill DEFAULT NULL COMMENT '雇员领导编号',

   `hiredate` datetime DEFAULT NULL COMMENT '雇佣时间',

   `sal` decimal(7,2) DEFAULT NULL COMMENT '工资月薪',

   `comm` decimal(7,2) DEFAULT NULL COMMENT '奖金',

   `deptno` int(2) unsigned zerofill DEFAULT NULL COMMENT '部门编号'

 );

 DROP TABLE IF EXISTS `salgrade`;

 CREATE TABLE `salgrade` (

   `grade` int(11) DEFAULT NULL COMMENT '等级',

   `losal` int(11) DEFAULT NULL COMMENT '此等级最低工资',

   `hisal` int(11) DEFAULT NULL COMMENT '此等级最高工资'

 );

 insert into dept (deptno, dname, loc)

 values (10, 'ACCOUNTING', 'NEW YORK');

 insert into dept (deptno, dname, loc)

 values (20, 'RESEARCH', 'DALLAS');

 insert into dept (deptno, dname, loc)                                                  

 values (30, 'SALES', 'CHICAGO');

 insert into dept (deptno, dname, loc)

 values (40, 'OPERATIONS', 'BOSTON');

 insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)

 values (7369, 'SMITH', 'CLERK', 7902, '1980-12-17', 800, null, 20);

 insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)

 values (7499, 'ALLEN', 'SALESMAN', 7698, '1981-02-20', 1600, 300, 30);

 insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)

 values (7521, 'WARD', 'SALESMAN', 7698, '1981-02-22', 1250, 500, 30);

 insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)

 values (7566, 'JONES', 'MANAGER', 7839, '1981-04-02', 2975, null, 20);

 insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)

 values (7654, 'MARTIN', 'SALESMAN', 7698, '1981-09-28', 1250, 1400, 30);

 insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)

 values (7698, 'BLAKE', 'MANAGER', 7839, '1981-05-01', 2850, null, 30);

 insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)

 values (7782, 'CLARK', 'MANAGER', 7839, '1981-06-09', 2450, null, 10);

 insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)

 values (7788, 'SCOTT', 'ANALYST', 7566, '1987-04-19', 3000, null, 20);

 insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)

 values (7839, 'KING', 'PRESIDENT', null, '1981-11-17', 5000, null, 10);

 insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)

 values (7844, 'TURNER', 'SALESMAN', 7698,'1981-09-08', 1500, 0, 30);

 insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)

 values (7876, 'ADAMS', 'CLERK', 7788, '1987-05-23', 1100, null, 20);

 insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)

 values (7900, 'JAMES', 'CLERK', 7698, '1981-12-03', 950, null, 30);

 insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)

 values (7902, 'FORD', 'ANALYST', 7566, '1981-12-03', 3000, null, 20);

 insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)

 values (7934, 'MILLER', 'CLERK', 7782, '1982-01-23', 1300, null, 10);

 insert into salgrade (grade, losal, hisal) values (1, 700, 1200);

 insert into salgrade (grade, losal, hisal) values (2, 1201, 1400);

 insert into salgrade (grade, losal, hisal) values (3, 1401, 2000);

 insert into salgrade (grade, losal, hisal) values (4, 2001, 3000);

 insert into salgrade (grade, losal, hisal) values (5, 3001, 9999);

---------------------------------------------------------------------------------------------------------------------------------

2,创建好表我们可以开始练习:如何显示每个部门的平均工资和最高工资

可以看到,group by对表进行了聚合并算出来个平均和最小工资,在使用group by后指定列名的,

可以在select前直接出现,聚合函数也可在此直接出现,如果不是分组条件等等列就不能出现

group by主要用于统计,查个人最高应该用where limit,order by来查。

3,having

having关键字可以对聚合后的数据进行判断,直接看例子:

显示平均工资低于2000的部门和它的平均工资

统计各个部门的平均工资

select avg(sal) from emp group by deptno:

having和group by配合使用,对group by结果进行过滤

--having经常和group by搭配使用,作用是对分组进行筛选,作用有些像where

4,having和where的区别:

两个函数的功能基本都是一样的,那么他们的区别主要是体现在语句的执行顺序,在select中也可以用having,但是不推荐

where语句是在from执行之后就执行,而having是在所有操作结束之后再执行:

可以根据数字来看到having执行顺序:

不要单纯认为只有磁盘上的表结构导入到MySQL,真是存在表才是表,我们要人知道通过各自中间筛选,它最终结果都是逻辑上的表,无论怎么赛选,所以

MySQL一切皆表!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/56621.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

动态规划(1)斐波那契数列模型

动态规划算法流程: 1、状态表示: 指的是dp(dynamic programming)表里面的值所表示的含义 如何得出:1、题目要求 2、经验题目要求 3、分析问题的过程中发现重复子问题 2、状态转移方程 dp[i]等于什么 3、初始化 保证…

dbt doc 生成文档命令示例应用

DBT提供了强大的命令行工具,它使数据分析师和工程师能够更有效地转换仓库中的数据。dbt的一个关键特性是能够为数据模型生成文档,这就是dbt docs命令发挥作用的地方。本教程将指导您完成使用dbt生成和提供项目文档的过程。 dbt doc 命令 dbt docs命令有…

案例实践 | 以长安链为坚实底层,江海链助力南通民政打造慈善应用标杆

案例名称-江海链 ■ 实施单位 中国移动通信集团江苏有限公司南通分公司、中国移动通信集团江苏有限公司 ■ 业主单位 江苏省南通市民政局 ■ 上线时间 2023年12月 ■ 用户群体 南通市民政局、南通慈善总会等慈善组织及全市民众 ■ 用户规模 全市近30家慈善组织&#…

leetcode二叉树(八)-二叉树的最大深度

题目 104.二叉树的最大深度 给定一个二叉树 root ,返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:3示例 2: 输入&…

【STM32 HAL库】MPU6050姿态解算 卡尔曼滤波

【STM32 HAL库】MPU6050姿态解算 卡尔曼滤波 前言MPU6050寄存器代码详解mpu6050.cmpu6050.h 使用说明 前言 本篇文章基于卡尔曼滤波的原理详解与公式推导,来详细的解释下如何使用卡尔曼滤波来解算MPU6050的姿态 参考资料:Github_mpu6050 MPU6050寄存器…

项目管理软件真的能让敏捷开发变得更简单吗?

敏捷开发是一种以快速交付和适应变化为核心特点的软件开发方法。其特点包括尽早并持续交付、能够驾驭需求变化、版本周期内尽量不加任务、业务与开发协同工作、以人为核心、团队配置敏捷等。 例如,尽早并持续交付可使用的软件,使客户能够更早地体验产品…

【算法篇】动态规划类(4)——子序列(笔记)

目录 一、Leetcode 题目 1. 最长递增子序列 2. 最长连续递增序列 3. 最长重复子数组 4. 最长公共子序列 5. 不相交的线 6. 最大子序和 7. 判断子序列 8. 不同的子序列 9. 两个字符串的删除操作 10. 编辑距离 11. 回文子串 12. 最长回文子序列 二、动态规划总结 …

[Linux#67][IP] 报头详解 | 网络划分 | CIDR无类别 | DHCP动态分配 | NAT转发 | 路由器

目录 一. IP协议头格式 学习任何协议前的两个关键问题 IP 报头与有效载荷分离 分离方法 为什么需要16位总长度 如何交付 二. 网络通信 1.IP地址的划分理念 2. 子网管理 3.网络划分 CIDR(无类别域间路由) 目的IP & 当前路由器的子网掩码 …

外包干了3周,技术退步太明显了。。。。。

先说一下自己的情况,大专生,21年通过校招进入武汉某软件公司,干了差不多3个星期的功能测试,那年国庆,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我才在一个外包企业干了3周的功…

神经网络构建与训练深度学习模型全过程(PyTorch TensorFlow)

神经网络构建与训练深度学习模型全过程(PyTorch & TensorFlow) 目录 🔗 什么是神经网络:基础架构与工作原理🧩 构建简单的神经网络:层次结构与激活函数🚀 前向传播:神经网络的…

基于Handsontable.js + Excel.js实现表格预览和导出功能(公式渲染)

本文记录在html中基于Handsontable.js Excel.js实现表格预览、导出、带公式单元格渲染功能&#xff0c;在这里我们在html中实现&#xff0c;当然也可以在vue、react等框架中使用npm下载导入依赖文件。 Handsontable官方文档 一、开发前的准备引入相关依赖库 <!DOCTYPE ht…

微服务经典应用架构图

从网上找了一个经典的微服务架构图&#xff0c;资料来源于若依开源系统的ruoyi-cloud&#xff0c;仅供参考&#xff01;

面向城市运行“一网统管”的实景三维示范应用

在新型智慧城市建设的浪潮中&#xff0c;实景三维技术正成为推动城市治理现代化的重要力量。“一网统管”作为城市运行管理的新理念&#xff0c;强调了跨部门协作和数据共享&#xff0c;而实景三维技术为此提供了强有力的支撑。本文将探讨实景三维技术如何赋能“一网统管”&…

Linux笔记---vim的使用

1. vim的基本概念 Vim是一款功能强大的文本编辑器&#xff0c;它起源于Unix系统的vi编辑器&#xff0c;并在其基础上进行了许多改进和增强。 Vim以其高效的键盘操作、高度的可定制性和强大的文本处理能力而闻名&#xff0c;尤其受程序员和系统管理员的欢迎。 Vim支持多种模式…

cmake 编译 01

CMakeLists.txt cmake_minimum_required(VERSION 3.10)project(MyProject)set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED True)# 如果顶层 CMakeLists.txt 文件中使用了 add_subdirectory() 命令&#xff0c;CMake 会进入指定的子目录&#xff0c;并处理该目录…

2024年超好用的防泄密软件分享|10款加密防泄密软件推荐

在当今数字化时代&#xff0c;企业数据安全已成为不可忽视的重要议题。随着数据泄露事件频发&#xff0c;选择一款高效可靠的防泄密软件变得尤为重要。本文将为您推荐10款在2024年备受推崇的防泄密软件&#xff0c;并重点介绍Ping32防泄密软件的功能与优势。 1. Ping32防泄密软…

Zico 2 靶机 - 详细流程

✨ 准备工作 靶机 && kali 环境要求 机器名网络配置靶机Zico 2NAT 模式攻击机kaliNAT 模式 靶机下载链接&#xff1a;zico2: 1 ~ VulnHub 打开 VMware&#xff0c;将 zico2.ova 拖拽到 VMware 中 设置 虚拟机名称(A) - 存储路径(P)- 导入 若是&#xff0c;…

3. 单例模式唯一性问题—构造函数

1. 构造函数带来的唯一性问题指什么&#xff1f; 对于不继承MonoBehaviour的单例模式基类 我们要避免在外部 new 单例模式类对象 例如 &#xff08;完整单例模式定义在上一节&#xff09; public class Main : MonoBehaviour {void Start(){// 破坏单例模式的唯一性&#xf…

【Python】AI Navigator对话流式输出

前言 在上一章节,我们讲解了如何使用Anaconda AI Navigator软件结合python搭建本机的大模型环境 【python】AI Navigator的使用及搭建本机大模型_anaconda ai navigator-CSDN博客 但是在上一章节搭建的大模型环境无法流式输出,导致输出需要等待很久,所以在这一章节,解决…