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家慈善组织&#…

查询hive数据库报错Required field ‘type‘ is unset

文章目录 一、报错内容TProtocolException: Required field ‘type’ is unset 一、报错内容TProtocolException: Required field ‘type’ is unset org.apache.thrift.protocol.TProtocolException: Required field ‘type’ is unset! Struct:TPrimitiveTypeEntry(type:nu…

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

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

C语言二级刷题

&#xff08;1&#xff09;考点9 &#x1f601; 1. #include <stdio.h> #define S(x) x*x #define T(x) S(x)*S(x) main() { int k5, j2;printf("%d,%d\n", S(kj),T(kj)); }本题考查宏定义 以kj直接代替x 则S(kj)kj*kj 2. #include <stdio.h> …

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

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

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

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

【算法篇】动态规划类(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&#xff08;无类别域间路由&#xff09; 目的IP & 当前路由器的子网掩码 …

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

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

C++11标准 future异步线程库

原文链接&#xff1a;C11标准 future异步线程库 前言 c标准有很多的版本,比较知名的如c98是第一版c标准,提供了c最底层的支持. 后面的c11和c20每个版本都会给c带来新特性. 而线程就是是c11最重要的特性. 虽然c98有pthread库,但是c11的thread有更好的跨平台能力,最重要的是c1…

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

神经网络构建与训练深度学习模型全过程&#xff08;PyTorch & TensorFlow&#xff09; 目录 &#x1f517; 什么是神经网络&#xff1a;基础架构与工作原理&#x1f9e9; 构建简单的神经网络&#xff1a;层次结构与激活函数&#x1f680; 前向传播&#xff1a;神经网络的…

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

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

React 探秘(一):fiber 架构

文章目录 背景React 采用 fiber 主要为了解决哪些问题&#xff1f;性能问题&#xff1a;用户体验问题&#xff1a; 为什么在 React 15 版本中性能会差&#xff1a;浏览器绘制原理&#xff1a;react 15 架构和问题 那么 fiber 怎么解决了这个问题&#xff1f;任务“大”的问题递…

微服务经典应用架构图

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

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

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

Linux笔记---vim的使用

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

Flutter框架学习计划

Flutter是一个由Google开发的开源移动应用开发框架&#xff0c;它允许开发者使用同一套代码库构建跨平台的移动、Web和桌面应用。以下是Flutter的背景、设计理念以及核心优势的详细介绍&#xff1a; 背景 Flutter最初发布于2017年&#xff0c;它的开发目的是为了提供一个高性…

javascript叉乘方法计算多边形的面积

多边形的面积可以通过对其顶点进行叉乘&#xff08;Cross Product&#xff09;来计算。这种方法基于向量分析&#xff0c;适用于简单多边形&#xff0c;尤其是当多边形的顶点按顺序排列时&#xff08;例如&#xff0c;顶点按照顺时针或逆时针方向排列&#xff09;。 计算原理 …