继续SQL

主知识点六:having

聚合前的筛选用where,聚合后的筛选用having

Having和where的区别是:运行顺序和对象不用

Having是在group by聚合后的基础上进行筛选。

●   【例题27*】(运行原理)查询总人口数至少为3亿的大洲和其平均gdp,其中只有gdp高于200亿且人口数大于6000万或者gdp低于80亿且首都中含有三个a的国家的计入计算,最后按国家数从大到小排序,只显示第一行。

分析:

(1)查询的是大洲和其平均gdp

(2)where限制是总人口数至少为3亿

(3)只有gdp高于200亿且人口数大于6000万

或者

gdp低于80亿且首都中含有三个a的国家的计入计算

(4)最后按国家数从大到小排序,order by desc

(5)只显示第一行 limit 1

我的代码:

select continent,avg(gdp)

from world

where gdp>20000000000 and population>60000000

or gdp <8000000000 and name like '%a%a%a'  //首都名,不是国家名

group by continent

having sum(population) >=300000000   //总人数,sum不要忘了

order by count(name) desc

limit 1

师兄代码:

select continent,avg(gdp) 平均gdp

from world

where (gdp > 20000000000

and population > 60000000)

or (gdp <8000000000

and capital like '%a%a%a%')

group by continent

having sum(population) >= 300000000

order by count(name) desc

limit 1

总结:where在group by前,having在group by后

●   【SQL运行原理】from--where--group by--having--order by--limit—select

●   【题目】查询人均gdp大于3000的大洲及其人口数,仅gdp在200亿和300亿之间的国家计入计算。

分析:

(1)查询大洲及其人口数

(2)限制是人均gdp大于3000——having

(3)仅gdp在200亿和300亿之间的国家计入计算(分组)。——where

我的代码:

select continent,population   // 大洲的人口数=洲内各国人口数之和,sum(population)

from world

where gdp between 20000000000 and 30000000000

group by continent

having (gdp/population)>3000  //不对,导致结果错误,是洲内!不是国,所以要求和

正确代码:

select continent,sum(population) 人口数,sum(gdp)/sum(population) 人均GDP

from world

where gdp between 20000000000 and 30000000000

group by continent

having sum(gdp)/sum(population) > 3000   //洲人均GDP

运行结果:

主知识点七:常见函数

●   【数学函数】

round(x,y)——四舍五入函数

round函数对x值进行四舍五入,精确到小数点后y位

y为负值时,保留小数点左边相应的位数为0,不进行四舍五入

例如:round(3.15,1)返回3.2,round(14.15,-1)返回10

●   【字符串函数】

       concat(s1,s2,...)——连接字符串函数

       concat函数返回连接参数s1、s2等产生的字符串

       任一参数为null时,则返回null

●   例如:concat('My',' ','SQL')返回My SQL,concat('My',null,'SQL')返回null

       replace(s,s1,s2)——替换函数

       replace函数使用字符串s2代替s中所有的s1

●   例如:replace('MySQLMySQL','SQL','sql')返回MysqlMysql

       left(s,n)、right(s,n)&substring(s,n,len)——截取字符串一部分的函数

       left函数返回字符串s最左边n个字符

       right函数返回字符串s最右边n个字符

       substring函数返回字符串s从第n个字符起取长度为len的子字符串,n也可以为负值,则从倒数第n个字符起取长度为len的子字符串,没有len值则取从第n个字符起到最后一位

●  例如:left('abcdefg',3)返回abc,right('abcdefg',3)返回efg,substring('abcdefg',2,3)返回bcd,substring('abcdefg',-2,3)返回fg,substring('abcdefg',2)返回bcdefg

●   【数据类型转换函数】

       cast(x as type)——转换数据类型的函数

       cast函数将一个类型的x值转换为另一个类型的值

       type参数可以填写char(n)、date、time、datetime、decimal等转换为对应的数据类型

●   【日期时间函数】

year(date)、month(date)&day(date)——获取年月日的函数

date可以是年月日组成的日期,也可以是年月日时分秒组成的日期时间

year(date)返回日期格式中的年份

month(date)返回日期格式中的月份

day(date)返回年日期格式中的日份

●   例如:year('2021-08-03')返回2021,month('2021-08-03')返回8,day('2021-08-03')返回3

date_add(date,interval expr type)&date_sub(date,interval expr type)——对指定起始时间进行加减操作

       date用来指定起始时间

       date可以是年月日组成的日期,也可以是年月日时分秒组成的日期时间

       expr用来指定从起始时间添加或减去的时间间隔

       type指示expr被解释的方式,type可以可以是以下值

       主要使用红框中的值

       date_add函数对起始时间进行加操作,date_sub函数对起始时间进行减操作

●   例如:date_add('2021-08-03 23:59:59',interval 1 second)返回2021-08-04 24:00:00,date_sub('2021-08-03 23:59:59',interval 2 month)返回2021-06-03 23:59:59

       datediff(date1,date2)——计算两个日期之间间隔的天数

       datediff函数由date1-date2计算出间隔的时间,只有date的日期部分参与计算,时间不参与

●   例如:datediff('2021-06-08','2021-06-01')返回7,datediff('2021-06-08 23:59:59','2021-06-01 21:00:00')返回7,datediff('2021-06-01','2021-06-08')返回-7

       date_format(date,format)——将日期和时间格式化

       date_format函数根据format指定的格式显示date值

       可以换使用的格式有

●   例如:date_format('2018-06-01 16:23:12','%b %d %Y %h:%i %p')返回Jun 01 2018 04:23 PM,date_format('2018-06-01 16:23:12','%Y/%d/%m')返回2018/01/06

●   【条件判断函数】——根据满足不同条件,执行相应流程

       if(expr,v1,v2)

       如果表达式expr是true返回值v1,否则返回v2

       例如:if(1<2,'Y','N')返回Y,if(1>2,'Y','N')返回N

       case when

       case expr when v1 then r1 [when v2 then r2] ...[else rn] end

●   例如:case 2 when 1 then 'one' when 2 then 'two' else 'more' end 返回two

       case后面的值为2,与第二条分支语句when后面的值相等相等,因此返回two

       case when v1 then r1 [when v2 then r2]...[else rn] end

●   例如:case when 1<0 then 'T' else 'F' end返回F

●   1<0的结果为false,因此函数返回值为else后面的F

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

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

相关文章

vxe-table 区域选取、复制粘贴功能,的基本使用

vxe-table区域选取、复制粘贴功能&#xff0c;的基本使用&#xff08;注&#xff1a;该功能仅支持企业版&#xff0c;这里仅供部分演示&#xff09; 1.鼠标区域选择功能&#xff1a; 参数说明&#xff1a; mouse-config.area 是否开启鼠标单元格区域选取 <template>&l…

详解基于 RAG 的 txt2sql 全过程

前文 本文使用通义千问大模型和 ChromaDB 向量数据库来实现一个完整的 text2sql 的项目&#xff0c;并基于实际的业务进行效果的展示。 准备 在进行项目之前需要准备下面主要的内容&#xff1a; python 环境通义千问 qwen-max 模型的 api-keyChromaDB 向量数据库acge_text_…

Linux-笔记 uboot修改设备树

1. FDT介绍 扁平设备树&#xff08;Flattened Device Tree&#xff0c;FDT&#xff09;&#xff0c;也叫平坦设备树&#xff0c;是设备树的一种二进制表示形式&#xff0c;提高了在嵌入式系统中的传输和解析效率&#xff1b; 2. 在U-Boot中使用FDT 2.1. 进入U-Boot 开发板上…

OpenCV 入门(四)—— 车牌号识别

OpenCV 入门系列&#xff1a; OpenCV 入门&#xff08;一&#xff09;—— OpenCV 基础 OpenCV 入门&#xff08;二&#xff09;—— 车牌定位 OpenCV 入门&#xff08;三&#xff09;—— 车牌筛选 OpenCV 入门&#xff08;四&#xff09;—— 车牌号识别 OpenCV 入门&#xf…

【论文阅读】VMamba: Visual State Space Model

VMamba:视觉状态空间模型 code&#xff1a;https://github.com/MzeroMiko/VMamba Background ​ CNN拥有线性复杂度因而可以处理高分辨率的图像&#xff0c;而ViT在拟合能力方面超过了CNN&#xff0c;但ViT是二次复杂度&#xff0c;在处理高分辨率图像时计算开销较大。ViT通过…

Wappalyzer指纹识别下载安装使用教程,图文教程(超详细)

「作者简介」&#xff1a;2022年北京冬奥会网络安全中国代表队&#xff0c;CSDN Top100&#xff0c;就职奇安信多年&#xff0c;以实战工作为基础对安全知识体系进行总结与归纳&#xff0c;著作适用于快速入门的 《网络安全自学教程》&#xff0c;内容涵盖系统安全、信息收集等…

Windows平台通过MobaXterm远程登录安装在VMware上的Linux系统(CentOS)

MobaXterm是一个功能强大的远程计算工具&#xff0c;它提供了一个综合的远程终端和图形化的X11服务器。MobaXterm旨在简化远程计算任务&#xff0c;提供了许多有用的功能&#xff0c;使远程访问和管理远程服务器变得更加方便&#xff0c;它提供了一个强大的终端模拟器&#xff…

钉钉开放平台创建企业内部H5微应用或者小程序

前言&#xff1a; 在当今企业数字化转型的浪潮中&#xff0c;创建企业内部H5微应用或小程序已成为提升工作效率和促进内部沟通的重要举措。发话不多说本文将介绍如何利用钉钉平台快速创建这些应用&#xff0c;让企业内部的工作更加便捷高效。 步骤 1.在浏览器打开链接…

【解决】Android APK文件安装时 已包含数字签名相同APP问题

引言 在开发Android程序过程中&#xff0c;编译好的APK文件&#xff0c;安装至Android手机时&#xff0c;有时会报 包含数字签名相同的APP 然后无法安装的问题&#xff0c;这可能是之前安装过同签名的APP&#xff0c;但是如果不知道哪个是&#xff0c;无法有效卸载&#xff0c;…

ESD静电问题 | 更换接口芯片

【转发微信公众号&#xff1a;EMC容冠电磁】

VMare Workstation安装ubuntu虚拟机异常问题处理

安装方法 ubuntu官网下载插件 异常处理 开启时报错"unable to proceed without a log file" 遇到此问题的都有一个共同点&#xff0c;工作目录路径上都带了数字&#xff0c;比如"Ubuntu 64位 01"&#xff0c;解决方法为&#xff1a; 选中"Ubuntu 64位…

用得助全媒体呼叫中心,让AI落到实处帮品牌做营销

怎么让人工智能落到实处的帮助到我们&#xff1f;我们今天来讲讲中关村科金得助全媒体呼叫中心是怎么让AI帮品牌。 这次聊的案例是知名的护肤品牌&#xff0c;该品牌在中国功能性护肤品市场占有率达到20.5%&#xff0c;这么高的市场占有率客户的咨询量也是非常庞大的&#xff0…

C++ 继承篇

面向对象语言的三大特性&#xff1a;封装&#xff0c;继承和多态 根据目前学到的知识&#xff0c;对于封装的理解&#xff0c;大致有两层&#xff1a; 将数据和方法封装&#xff0c;不想让外面看到用private/protected修饰&#xff0c;想让外面看到用public修饰类型的行为不满…

[嵌入式系统-71]:RT-Thread-组件:日志管理系统ulog,让运行过程可追溯

目录 ulog 日志 1. ulog 简介 ulog 架构 配置选项 日志级别 日志标签 2. 日志初始化 初始化 去初始化 3. 日志输出 API 4. 日志使用示例 使用示例 在中断 ISR 中使用 同步模式&#xff08;Synchronous Mode&#xff09; 异步模式&#xff08;Asynchronous Mode&…

蓝桥杯EDA客观题

目录 前言 一、PCB类知识点和题目分析 1.电阻 2.电容 3.封装类 4.单位转换类 5.电路板结构类 6.PCB绘制规则 7.立创软件 8.PCB硬件 线性电源和开关电源 二、数电知识点和题目分析 1.门电路 2.逻辑代数 3.组合逻辑电路 4.触发器 5.时序逻辑电路 6.其他 三、模…

vue3+ts之el-tooltip换行显示内容

<el-tooltip placement"top-end"><div slot"content" class"tips"><el-button type"primary" click"exportData">导出</el-button></div><template #content><span class"cont…

【项目实战】使用Yolov8 + tesseract 实现身份证信息解析(OCR) + 输入可为图片或者pdf + 完整代码 + 整体方案 + 全网首发

本项目可用于实验,毕业设计参考等。整体效果如下所示: 说明:图片来源于网络,如有侵权,请联系作者删除。 目录 一 数据集制作

C语言--带环链表问题

继续学习 一、判断链表是否带环 141. 环形链表 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a;用快慢指针&#xff0c;快指针走两步&#xff0c;慢指针走一步&#xff0c;当慢指针走一半快指针进到环里 当慢指针进环&#xff0c;快指针已经在环中转了一会儿了 | |…

关于Java selenium使用前浏览器驱动的下载和环境变量的配置

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

vue+ant-design+formBuiler表单构建器——技能提升——form design——亲测有效

最近看到后端同事在弄一个后台管理系统&#xff0c;额&#xff0c;前端真的是夹缝中生存啊&#xff0c;AI抢饭碗&#xff0c;后端也想干前端的活儿。。。 他用到了表单构建器&#xff0c;具体效果如下: 网上有很多适用于ElementUi和ant-design的form design插件&#xff0c;下…