当前位置: 首页 > news >正文

MySQL分组查询和子查询

 1.分组查询

分组的使用方式:分组查询是为了将数据分成不同的组,然后对每组分别处理,对每组的数据做统计,所以一般都要配合聚集函数来使用。如果不做统计,单纯的分组是没有意义的,单纯分组会返回每组的第一条数据。
我们应该配合聚集函数使用分组,同时注意在聚集结果之前添加分组名称,不然不知道统计结果属于哪一组。
    语法:关键字group by 后面跟上要分组的字段。
    举例:select 班级,avg(年龄) form 表名 group by 班级;

SELECT classnum,AVG(age) FROM studentinfo GROUP BY classnum;


分组也可以加条件: 可以使用having关键字对分组之后统计的聚集结果进行进一步的筛选。having专门配合分组使用。

举例用的bus_car表,

例如

-- 统计不同车型的平均价格,然后只筛选平均价大于40万的车型
SELECT carnumber,AVG(price)FROM bus_car GROUP BY carnumber HAVING AVG(price)>400000;
-- 根据颜色分组,统计每种颜色车的数量,求数量大于3的组
SELECT color,COUNT(*) FROM bus_car GROUP BY color HAVING COUNT(*)>3;
-- 查询bus_rent表,查询租车订单数量排在前三名的操作员
SELECT opername,COUNT(*) FROM bus_rent GROUP BY opername ORDER BY COUNT(*) DESC LIMIT 3;
查询bus_rent表,查询租车订单数量大于等于3个的操作员
SELECT opername,COUNT(*) FROM bus_rent GROUP BY opername HAVING COUNT(*)>=3;

综合使用:
联合使用分组、排序、以及限制返回行数、条件查询等。注意它们的顺序:

select 分组字段,聚集函数统计的分组结果 from 表名 where 条件 group by 分组字段 having 分组之后的条件 order by 排序字段 limit 返回行数;

-- 查询bus_car表,求租金大于2500的平均车价在30万以上的平均车价最贵的汽车类型。
SELECT cartype,AVG(price) 
FROM bus_car WHERE rentprice>2500 
GROUP BY cartype HAVING AVG(price)>300000 
ORDER BY AVG(price) DESC LIMIT 1;


  2.子查询


    子查询就是查询的嵌套,通过()表示嵌套的层级关系。
有的时候我们要查询的数据,一层查询是不够的,拿不到想要的数据。这时候可以把问题分解成两步,第一步先写一个查询,拿到中间数据,这个查询就是子查询。然后再写一个外层的查询,叫做父查询,父查询通过子查询的结果再去查询,得到最终结果。
嵌套查询执行过程:从最里层的查询开始执行,逐步往外执行。

例如·查询班级人数大于30人的班级的学生姓名

SELECT classnum FROM classinfo WHERE studentnums>30; -- 子查询
SELECT stuname FROM studentinfo WHERE classnum IN (SELECT classnum FROM classinfo WHERE studentnums>30); -- 查询嵌套

使用租车数据库,查询操作员李四出租的订单中车的价格

SELECT price FROM bus_car WHERE carnumber IN(SELECT carnumber FROM bus_rent WHERE opername='李四');

查询2019年10月的订单的车型描述信息

SELECT description FROM bus_car WHERE carnumber IN(SELECT DISTINCT carnumber FROM bus_rent WHERE createtime LIKE '2019-10%');


 

相关文章:

  • secsgem v0.3.0版本使用说明文档
  • 探索 C 与 Java/Kotlin 的语言差异:从指针到高阶函数
  • 深入定制 QSlider——实现精准点击跳转与拖拽区分
  • 用Python手搓一个简单的饭店管理系统(上篇)
  • 依赖注入(DI)与自动装配的深度分析:优势、局限与实践考量
  • 智慧城市:如同为城市装上智能大脑,开启智慧生活
  • 用 Depcheck 去除Vue项目没有用到的依赖
  • GitHub action中的 jq 是什么? 常用方法有哪些
  • 计算机保研机试准备——C++算法题
  • 【cmake-笔记】
  • CANDENCE 原理图元件有多个相同名称引脚报错
  • 2.区间dp
  • QML TableView:基础用法和自定义样式实现
  • ROW_NUMBER 函数
  • 嵌入式开发_电能计量芯片HLW8110与HLW8112
  • Mysql-视图和存储过程
  • 在 K8s 上构建和部署容器化应用程序(Building and Deploying Containerized Applications on k8s)
  • THCON 2025
  • 向量数据库Qdrant 安装 不使用docker
  • Windows进行磁盘分区/扩容
  • 泽连斯基:俄军违反停火承诺,20日10时起前线俄炮击增加
  • 广东音像城清退,发烧友紧急“淘宝”,曾见证广州音乐黄金期
  • 多元布局、抱团取暖……上海虹口区召开外向型企业圆桌会议
  • 科普|一名肿瘤医生眼中的肺癌诊疗变化:从谈癌色变到与癌共存
  • 旧电梯换新如何分摊费用?低楼层可以不出钱吗?上海闵行举办讨论会
  • 恒安集团创始人许连捷逝世:白手起家缔造百亿纸品巨头,个人曾捐赠超10亿