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

新手村之SQL——分组与子查询

1.GROUP BY
GROUP BY 函数就是 SQL 中用来实现分组的函数,其用于结合聚合函数,能根据给定数据列的每个成员对查询结果进行分组统计,最终得到一个分组汇总表。

mysql> SELECT `country`, COUNT(`country`) AS `teacher_count`-> FROM `teachers`-> GROUP BY `country`-> ORDER BY `teacher_count`, `country`;
+---------+---------------+
| country | teacher_count |
+---------+---------------+
| JP      |             1 |
| UK      |             1 |
| USA     |             1 |
| CN      |             2 |
+---------+---------------+
4 rows in set (0.04 sec)

2.HAVING 子句
我们在使用 WHERE 条件子句时会发现其不能与聚合函数联合使用,为解决这一点,SQL 中提供了 HAVING 子句。在使用时, HAVING 子句经常与 GROUP BY 联合使用,HAVING 子句就是对分组统计函数进行过滤的子句。

mysql> SELECT `T`.`name`, IFNULL(SUM(`C`.`student_count`),0) AS `student_count`-> FROM `courses` `C` -> RIGHT JOIN `teachers` `T` ON `C`.`teacher_id` = `T`.`id`-> GROUP BY `T`.`id`-> HAVING `student_count` < 3000-> ORDER BY `student_count`, `name`;
+------------------+---------------+
| name             | student_count |
+------------------+---------------+
| Linghu Chong     |             0 |
| Northern Beggar  |             0 |
| Southern Emperor |          1520 |
+------------------+---------------+
3 rows in set (0.02 sec)

例题

在这里插入图片描述
在这里插入图片描述

筛选出同一国家的教师平均年龄大于所有教师平均年龄的国家,并获取这些国家的所有教师信息

拆分:

1.先选出教师平均年龄大于所有教师平均年龄的国家

SELECT country from teachers
group by country
having avg(age) > (SELECT avg(age) from teachers)

2.拿着这些国家去teachers表里找出教师信息

SELECT * from teachers
where country in(
SELECT country from teachers
group by country
having avg(age) > (SELECT avg(age) from teachers)
);

3.内联视图子查询
现需要查询国籍为美国(USA),且年龄最大的教师,请使用内联视图子查询实现。

本题将从教师表中查询到的美国教师作为内联表,再使用 WHERE 子句进行查询操作。

SELECT *
FROM (SELECT *FROM `teachers`WHERE `country` = 'USA'
) `T`
WHERE `age` = (SELECT MAX(`age`)FROM `teachers`WHERE `country` = 'USA'
);
http://www.lryc.cn/news/253678.html

相关文章:

  • 【hacker送书第9期】算法训练营(入门篇)
  • 微服务链路追踪组件SkyWalking实战
  • ubuntu 更换国内镜像
  • 树模型与深度模型对比
  • 测试类运行失败:TestEngine with ID ‘junit-jupiter‘ failed to discover tests
  • nodejs使用node-cron实现定时任务功能
  • 【1day】蓝凌OA 系统datajson.js接口远程命令执行漏洞学习
  • ABCDE类网络的划分及保留网段
  • 营销系统规则引擎
  • 【Linux】命令行参数
  • 【信息安全】-个人敏感信息、个人信息、个人金融信息
  • 海外服务器和国内服务器有什么样的区别呢
  • 电脑屏幕亮度怎么调?学会4个方法,轻松调节亮度!
  • 微信小程序之猜数字和猜拳小游戏
  • CETN01 - How to Use Cloud Classroom
  • 安卓8预装可卸载应用
  • 微服务实战系列之MemCache
  • 解决服务端渲染程序SSR运行时报错: ReferenceError: document is not defined
  • 【漏洞复现】狮子鱼任意文件上传漏洞
  • LINUX 下部署github仓库
  • CentOS中安装数据库
  • GPT-Crawler一键爬虫构建GPTs知识库
  • 在微信小程序中如何改变默认打开的页面
  • Ardupilot开源飞控之VTOL之旅:配件试装
  • STM32-GPIO
  • MySQL的事务
  • go-carbon v2.2.14 发布,轻量级、语义化、对开发者友好的 Golang 时间处理库
  • 解决 IIS HTTP 403 错误问题
  • 字符设备驱动基础—并发控制
  • 5-Tornado入门、程序的原理图、tornado不能使用同步代码的演示