MySQL--Group by分组与count计数(进阶)

2023-11-11


      更多关于数据库知识请加关注哟~~。若需联系和想安装MySQL请加博主:
      QQ:3327908431
      微信:ZDSL1542334210

        前言:MySQL一系列操作猛如虎,代码易懂清晰,结构也简单,今天我们来谈一谈MySQL里面的一些常用操作:group by分组与count计数(此处难度稍大)。我们依然以例子来讲起。

1、Group by语法

        Group by的语法:"Group by <字段>“意为按照字段进行分类汇总。这里需要注意四点:
        (1)按照你的分类要求Group by 后字段里没有重复的记录出现;
        (2)如果Group by 后需要跟上条件进行判断,则:“Group by <字段> having <条件>”;
        (3)Group by 后面的再判断条件不能用"where”;
        (4)Group by <字段> 在分组条件不指定的情况下,是默认取每一类的第一条记录作为输出结果。
        具体情况来看例子:

2、创建表格

学生得分表scores

create table scores (s_id varchar(5),
    c_id varchar(3),score float);
    
insert into score values 
("001","01",135),
("005","01",120),
("003","01",110),
("002","01",90),
("005","02",140),
("001","02",125.5),
("004","02",100),
("006","02",90),
("002","03",102),
("005","03",100.6),
("001","03",100),
("003","03",95.6),
("004","03",83),
("003","02",80),
("006","03",79.5);

学生信息表stu

create table stu(s_id varchar(5),
   s_name varchar(5),
   s_sex varchar(1),
   s_age int(3),s_day date);

insert into stu values
("001","李华","男",23,'1996-8-16'),
("002","王二","男",24,'1997-3-16'),
("003","赵敏","女",23,'1990-5-26'),
("004","张莹莹","女",22,'1995-2-16'),
("005","朱亚军","男",25,'1999-8-16'),
("006","马云","男",28,'1993-12-16'),
("007","周星星","男",23,'1996-7-19');

3、题目代码部分

题目一:查询每门课程得分小于90分的学生数

select c_id,count(*) from scores 
    where score<90 group by c_id;
# 答案:
02	1
03	2
# 这里必须先判断分数后再分组,不然分组后就有可能了,没法判断

题目二:对每门课求平均分

select c_id,avg(score) from scores group by c_id;
# 答案:
01	113.7500
02	107.2000
03	93.6667

题目三:查询每门课程被重修的学生数超过一人的课程与人数

select c_id,count(*) 重修人数 from scores where
   score<90 group by c_id having 重修人数>1;
# 答案: 03	 2

        这里前面的先判断条件在group by 前面,用where,后再判断重修人数大于1就再group by 后,只能用having。

题目四:查询每位同学的学号、平均成绩

select s_id,avg(score)平均成绩 from scores group by s_id;
# 答案 :
001	120.3333
002	96.0000
003	95.3333
004	91.5000
005	120.3333
006	85.0000

题目五:查询每门课程的课程号、平均成绩

select c_id,avg(score)课程平均成绩 from scores group by c_id;
# 答案 : 
01	113.75
02	107.20
03	93.67

题目六:查询90后学生的男女数量,并按照数量降序排列

select s_sex,count(*)数量 from stu where 
   year(s_bothday)>=1990 group by s_sex order by 数量 desc;
# 答案 : 42

题目七:查询不同性别在各年份的出生人数

select s_sex 性别,year(s_bothday)年份,count(*)人数 
    from stu group by 年份;
    
select s_sex 性别,year(s_bothday) 年份,count(*)人数 
    from stu group by s_sex,year(s_bothday);
# 以上两种方法都对:1990	11993	11995	11996	21997	11999	1

        这里若不知道时间的转换的朋友请观看:
MySQL–时间与日期的处理、获取当地时间、时间与时间戳转换

        剧情需要,我们在stu表里面插入一条记录:

insert into stu values
    ("008","周星星","男",27,'1990-7-19');

题目八:查询同名同姓学生名单,并统计有同名的学生姓名和同名人数

select *,count(*)同名人数 from stu group by
     s_name having 同名人数>1;  #法一
     
select *,count(*)人数 from stu where s_name in select 
    (s_name from stu group by s_name having count(*)>1);  #法二
# 答案:
007	周星星	男	23	1996-7-19	2

题目九:查询每门课程的平均成绩,并且平均成绩大于等于100分

select c_id,avg(score)平均成绩 from scores group by
     c_id having 平均成绩>100;
# 答案 :
01	113.7500
02	107.2000

题目十:查询每位同学的平均成绩,且平均分数大于等于100

select s_id,avg(score)平均成绩 from scores group by
     s_id having 平均成绩>=100;
# 答案 :
001	120.3333
005	120.3333

题目十一:查询至少选修了2门课的学生学号

select s_id from scores group by s_id having
    count(*)>=2;
# 答案 :
001
002
003
004
005
006

题目十二:查询至少两门课程及格的学生学号

select s_id from scores where score>=90 group by
    s_id having count(*)>=2; # 法一

select s_id from 
    (select * from scores where score >=90)as a1 
    group by a1.s_id having count(*)>=2; # 法二
# 答案 : 
001
002
003
005

4、文末彩蛋–开心一刻

       以前我朋友小熊在一家快递公司上班,有一天刚好周末,我就寻思着抽个空去看看他,结果刚到才坐下来,一位美女就拿着手机气冲冲的跑过来说到:“姓熊的,为什么我的快递还没有发货,你是不是没有寄?是不是?你是没有寄吧?”。然后我说对对对,他没有,然后小熊说:“啊,对不起美女,我忘了给你检查了,要不你现在随我进来检查检查,看看有没有?”。然后美女说到:“算了吧,你这速度,有也和没有差不多”,接着她就走了,然后小熊说道:“熟人就是不好做生意!”…

          博友们好,今天到这里就结束啦每篇文章都有最后的文末彩蛋–轻松一刻哟感谢观看,我是Jetuser-data[学习更多MySQL知识请加关注]
链接: [https://blog.csdn.net/L1542334210]
CSND:L1542334210
在这里插入图片描述
祝大家工作顺利!阖家欢乐!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL--Group by分组与count计数(进阶) 的相关文章

  • 在 MySQL 中处理事件

    我有一个存储过程 它基本上从一个表中选择数据并插入到另一个表中 基本上我是手动进行数据归档 现在 我想写一个事件 就像讨论的那样here 然而 在阅读该文章并在线研究后 我开始知道不可能在存储过程中创建事件 有没有办法在 MySQLWork
  • 从 MySQL 数据库的所有表中删除所有零日期

    我在 MySQL 中有很多表 其中 dateTime 列中包含零日期0000 00 00 00 00 00 使用某种管理设置 是否可以禁用零日期并用静态值替换所有零1 1 1900 EDIT 我正在从事数据库迁移工作 涉及将 100 多个
  • Azure Database for MySQL - webapp Nodejs

    所以我一直在使用本地 mysql 工作台开发一个网络应用程序 我最近将数据库移至 Azure Database for MySQL 在我离开当地之前 一切都运转正常 我的所有网页都工作正常 现在 4 个页面中只有 2 个可以工作 当我单击损
  • MySQLWorkbench正向工程错误

    我正在 MySql Workbench 8 0 中处理模型 当我单击正向工程并尝试生成我的模型的脚本时 我得到 Executing SQL script in server ERROR Error 1064 You have an erro
  • 使用 SSH.NET 库从 .NET 连接到 MySQL

    我正在开发一个网页 ASP NET C 通过 SSH 查询远程服务器上的 MySQL 数据库 我正在使用这两个库 mysql connector net 6 9 7 和 Renci SshNet dll 我可以通过 SSH 连接使用远程服务
  • MySQL 有命名约定吗?

    我是这样做的 表名是小写的 使用下划线分隔单词 并且是单数 例如foo foo bar etc 我通常 并非总是 有一个自动增量 PK 我使用以下约定 tablename id e g foo id foo bar id etc 当表包含作
  • MySQL 返回其中列包含集合中的任何但仅包含关键字的所有行

    有没有一种方法可以选择其中一列仅包含但任意数量的预定义值的行 我一直在使用这个 但它返回我的列至少包含一个值的任何行 我知道这正是它应该做的 但我正在寻找一种方法来仅选择关键字列中仅包含我的关键字的行 SELECT FROM product
  • MySQL A 或 B,但不能同时两者

    这似乎是一个简单的查询 但我似乎无法理解它或将其与堆栈溢出上的其他帖子联系起来 谁能解释一下 这是我到目前为止所拥有的 它正在返回一个人或两个人去过的所有酒吧的记录 TBL 常见模式 饮酒者 VARCHAR 50 PK 酒吧 VARCHAR
  • 使用 Workbench 创建新的 MySQL 数据库

    我只是想用一些简单的表创建一个新的 MySQL 数据库 我在 Workbench 中创建了一个新的 EER 模型 因此我对我想要的数据库进行了建模 其中包含我需要的所有表 字段 我没有看到任何方法可以采用模型并从中创建实际的数据库 现在它刚
  • MySQL工作台下载失败

    我有一台 Mac 并使用并行访问 Windows 11 我正在尝试下载 MySQL 除了 Workbench 之外 所有内容均已成功下载 每次安装都失败 并出现错误 处理器不足以运行 MySQL Workbench 8 0 CE 我尝试通过
  • 如何将值插入到MYSQL中的自动标识列中[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我想将值插入 mysql innod
  • 什么是以及如何从我的数据库中删除表空间错误? [复制]

    这个问题在这里已经有答案了 由于负载脱落问题 我的数据库中的一张表已损坏 我删除了该表 现在我想再次创建该表 我明白了error 错误 1813 表 的表空间zorkif sys user accounts 存在 请在导入之前丢弃表空间 S
  • Mysql 安装程序显示错误:无法写入内存

    我正在尝试安装 MySql Workbench 并下载mysql 安装程序 web community 5 7 13 0 msi 当我运行此文件时 出现以下错误 0x6d4424ff 处的指令引用了 0x6d4424ff 处的内存 内存无法
  • 为 mysql_options() 提供了不受支持的选项

    我已经在我的本地计算机上安装了 mysql server 和 mysql workbench 操作系统为 Ubuntu 16 04 我可以通过 CLI 连接到 mysql server 但不能通过 mysql workbench mysql
  • 为什么在 MySQL 中使用 CAST 时出现语法错误?

    我正在使用 MySQL Workbench v5 2 44 CE 我正在针对本地 MySQL 5 5 安装运行它 我正在尝试使用CAST函数 但不断出现以下错误 语法错误 意外的 INT SYM 源日期和目标日期类型是什么并不重要 唯一不给
  • 尝试使用工作台将 postgresql 数据库迁移到 mysql 时出错

    我正在尝试按照本教程将 postgresql 数据库迁移到 mysql http mysqlworkbench org 2012 11 how to migrate postgresql databases to mysql using t
  • 我怎样才能找出MySQL中的默认字符集/排序规则[重复]

    这个问题在这里已经有答案了 我在 Ubuntu 18 04 上使用 MySQL 和 MySQL Workbench 8 0 当我创建字符串类型的列时 我将字符集 排序规则保留为默认值 在 MySQL Workbench 中 它只是告诉我就是
  • 小写表名错误

    我正在尝试设置lower case table name价值2 因为它是 Windows 服务器 但是当我启动 MySQL Workbench 并连接到我的服务器时 出现以下错误 服务器所在的系统不能正确支持所选的lower case ta
  • 在“读取初始通信数据包”时失去与 MySQL 服务器的连接,系统错误:61

    3天了 已经碰壁了 我正在运行 mac os x 我已经安装了mysql 5 5 14 osx10 6 x86 64 dmg 就上下文而言 我需要安装 mysql gem 以便与 ruby on Rails 一起使用 除非有一个有效的 my
  • 列是存在的,但是当我尝试删除它时,它说 MYSQL 中没有列? **错误代码:1091。无法删除...**

    我尝试运行以下查询 ALTER TABLE ORDER DETAIL DROP foreign key USER ID It says Error Code 1091 Can t DROP USER ID check that column

随机推荐

  • blockchain java_blockchain-java(简易区块链项目)

    blockchain java 简易区块链项目 是基于Java实现的一个简易区块链 联盟链 项目 包括加密工具 钱包 P2P 传输 区块同步 POW 共识等基础实现 使用方法 单节点部署 这个很简单 直接像运行普通的 SpringBoot
  • d3dUtility.cpp 统一回答:在vs2015中调试D3D9龙书 代码示例:4.4 d3dUtility.cpp

    龙书d3d9的代码 在作者的资源中 可查找 免分 注意 如果可能的话 请先安装DXSDK Jun10 exe 然后再安装VS2010或VS2015 否则 会在安装DXSDK Jun10 exe的过程的最后阶段会报错 不过 即使是报错 也不影
  • <稀缺-我们是如何陷入贫穷与忙碌的> 摘要

    2015 07 08 10 12 lt 稀缺 我们是如何陷入贫穷与忙碌的 gt 摘要 这本书分析了稀缺的内在来源和所造成的影响 列举了许多例子 下面我把它的核心思想记录一下 稀缺心态是一切稀缺的根源 资源稀缺并不可怕 就怕有稀缺心态 以后简
  • Ubuntu20.04下显卡驱动安装的完整过程(超详细)

    1 首先查看硬件 显卡是否安装 lspci grep i vga lspci grep i nvidia 注意 如果没显示显卡信息则看显卡是否安装好 看下显卡风扇是否在转 图中是显卡位置 然后再执行上面的命令 确定显卡安装没问题了之后 再看
  • VMware Workstation无法提供该虚拟机所需的所有图形功能

    报错信息 VMware Workstation无法提供该虚拟机所需的所有图形功能 在该虚拟机引导后 图形硬件 图形驱动程序或Vware软件版本可能已发生变化 该虚拟机将继续运行 但在关闭该虚拟机之前 某些图形操作可能会出现不可预见的行为 原
  • replace将逗号换成分好 vue_使用replace()方法替换一段文字中的某一个字符串

    一 replace 方法的第二个参数为字符串时 1 第一个参数为字符串 替换匹配到的第一个字符串 var str 段落这是一个段落 str replace 段落 段落 2 第一个参数为正则表达式时 替换所有匹配到的字符串 var str 段
  • 电脑连接不上网络(梯子原因)

    1 问题描述 2 具体原因 使用梯子造成的 具体原因没有深究 3 解决办法 控制面板 网络和Internet Internet选项 连接 局域网设置 在代理服务器处取消勾选为LAN使用代理服务器 这些设置不用于拨号或VPN连接 X
  • react-draggable实现拖拽详解

    react draggable 属性 常用属性 属性列表 事件列表 举例 首先安装 react draggable 实现移动 希望小编写的能够帮助到你 属性 常用属性 属性 默认值 介绍 axis x handle拖动的方向 可选值 x y
  • Abbirb120型工业机器人_ABB机器人IRB120资料的详细介绍

    ABB机器人IRB120资料的详细介绍 在工业4 0时代 越来越多机器人投身于生产一线 ABB机器人作为全球 的机器人品牌 受到众多企业的关注 近期有很多朋友都在质疑abb IRB120这个型号的机器人性能如何 接下来就由专业人士为大家带来
  • dialog BLE SDK 学习(3)

    dialog DA14580 SDK版本 5 0 4 本文介绍了DA14580 SDK的学习感想和建议 分享给大家 首先 Dialog官网上的资料挺全的 但是是英文的 如果英文不好 比如笔者 阅读起来是件痛苦的事情 资料都挺好的 唯一的不足
  • 华为手机怎么连接苹果电脑?

    华为手机怎么连接苹果电脑 https zhidao baidu com question 1946793458712978108 html 连接之后 在mac上面进行安装dmg文件 然后就有了一个读取android文件的应用 然后就可以查看
  • C#初级知识——List和Dictionary(一些笔记)

    C 初级知识 List和Dictionary 一些笔记 文章目录 C 初级知识 List和Dictionary 一些笔记 前言 一 什么是集合结构 二 List集合 1 介绍 2 语法相关 1 创建List泛型集合 2 集合数据操作 3 L
  • linux安装tcpdump

    1 官网下载tcpdump和libpcap压缩包 登录 https www tcpdump org index html latest releases 2 安装相关依赖库 1 yum y install gcc c 2 yum y ins
  • QT ui设计师界面常用操作记录(QTabWidget)

    目录 1 QTabWidget 怎么删除已加入的tab页 怎么修改tab页的名字 1 QTabWidget 怎么删除已加入的tab页 如图所示原来有四个 现在我要删除两个 直接在你要删除的tab页右键 会出现两个选项 选择删除 即可删除 完
  • 2021年四川省大学生网络安全技能大赛EZSQL

    题目一 EZSQL 操作内容 考点 MYSQL8新特性 fuzz之后发现 只能盲注 过滤了select 使用1 and ascii substr database 1 1 gt num 可以盲注出数据库 但是后面就搞不动了 无select注
  • Derby数据库简介

    一 Derby 数据库介绍 Apache Derby 是一个完美的 100 Java 编写的内存数据库 属于 Apache 的一个开源项目 并且是一个容易管理的关系数据库管理系统 可以和一些商业产品的特性进行交付 Apache Derby
  • QT模态与非模态

    含义 模态对话框 Modal Dialog 与非模态对话框 Modeless Dialog 的概念不是Qt所独有的 在各种不同的平台下都存在 又有叫法是称为模式对话框 无模式对话框等 模态窗体是指 在其没有被关闭之前 用户不能与同一个应用程
  • 一次性纸杯包含的测试点

    功能方面 是否能盛水 性能 能盛多少水 能盛多少度的热水和冰水 是否容易变形 是否有隔热性能 杯底设计是否稳固不易倾斜 能够叠加多少个杯子 是否能重复使用 能够使用多少次 杯子的厚度和重量是否符合需求 是否容易被风吹倒 能够存放多少时间 安
  • IDEA 查找第三方jar里的内容

    1 Find in Path Edit gt Find gt Find in Path Scope gt Project and Libraries 说明 maven工程 貌似要下载jar source才行 2 double shift 这
  • MySQL--Group by分组与count计数(进阶)

    MySQL Group by分组与count计数 进阶 1 Group by语法 2 创建表格 3 题目代码部分 4 文末彩蛋 开心一刻 更多关于数据库知识请加关注哟 若需联系和想安装MySQL请加博主 QQ 3327908431 微信 Z