继续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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

git的标签管理

理解标签 在Git中,标签tag用于标记特定的一个重要点&#xff0c;比如版本发布。标签允许捕捉某一次提交的状态&#xff0c;当我们需要退回到某次提叫的版本时&#xff0c;通过标签我们快速定位到。标签具有两种类型&#xff1a; 轻量标签&#xff1a;最简单的标签形式&#x…

QGIS编译

一&#xff0c;安装&#xff1a;OSGeo4W 二&#xff0c;安装&#xff1a;Cygwin64 https://www.cygwin.com/setup-x86_64.exe 三&#xff0c;安装&#xff1a; 安装bison和flex 四&#xff09;QGIS_3.28 下载QGIS_3.28的源码包 五 环境变量设置&#xff1a; echo off set VS19…

那些可免费使用的在线大语言模型服务

2022年底以ChatGPT[1]为代表的大语言模型的出现掀起了人工智能应用的新浪潮。这些庞大的语言模型经过对海量文本数据的训练&#xff0c;能够理解和生成逼近人类水平的自然语言&#xff0c;在对话、问答、文本生成、代码编写等领域展现出了惊人的能力。 最初这种能力“垄断”在O…

用手势掌控PPT,玩转演示新姿势

推荐运行环境 使用anaconda创建环境&#xff0c;以免污染原来的python开发环境conda install python3.9pip install -q mediapipe0.10.0pip install pyautoguiPython: version 3.8 - 3.11PIP: version 20.3 请注意以下的坑 以下为我测试过程中的大坑&#xff0c;请及时避开&am…

【2024高校网络安全管理运维赛】巨细记录!

2024高校网络安全管理运维赛 文章目录 2024高校网络安全管理运维赛MISC签到考点&#xff1a;动态图片分帧提取 easyshell考点&#xff1a;流量分析 冰蝎3.0 Webphpsql考点&#xff1a;sql万能钥匙 fileit考点&#xff1a;xml注入 外带 Cryptosecretbit考点&#xff1a;代码阅读…

Driftingblues靶机系列Driftingblues5

获取靶机的ip&#xff1a;192.168.108.37 扫描靶机的端口服务: 看到web服务和ssh服务&#xff1a; 先查看一下web服务&#xff1a; 扫描到web服务的信息&#xff1a; 访问web服务&#xff1a; 在源代码中并没有看到有什么新的信息&#xff0c;扫描一下靶机目录&#xff1a;…

vue地址选择器-三级联选择器+详细地址

在页面的显示情况 前端拼接实现存储 具体实现步骤 1.安装中国全省市区的数据 在命令提示符窗口使用管理员身份进入对应vue项目的文件夹&#xff0c;在窗口安装 npm install element-china-area-data -S2.在script内引入安装的数据 import {regionData,codeToText } from…

从Flutter范儿的单例来看Dart的构造函数

点击上方蓝字关注我&#xff0c;知识会给你力量 单例模式 单例模式应该是设计模式中使用的最广泛的一种设计模式了&#xff0c;在Kotlin中&#xff0c;甚至为它单独创建了一个语法糖——object类&#xff0c;来快速实现单例模式&#xff0c;而在Dart中&#xff0c;并没有像Kotl…

某盾BLACKBOX逆向关键点

需要准备的东西&#xff1a; 1、原JS码 2、AST解混淆码 3、token(来源于JSON) 一、原JS码很好获取&#xff0c;每次页面刷新&#xff0c;混淆的代码都会变&#xff0c;这是正常&#xff0c;以下为部分代码 while (Qooo0) {switch (Qooo0) {case 110 14 - 55: {function O0…

Win10/11共享文件夹,访问提示需要输入用户名密码

Win10/11共享文件夹&#xff0c;访问提示需要输入用户名密码 问题 已经关闭了密码保护共享&#xff0c;但是局域网其他电脑访问该文件夹&#xff0c;提示需要输入用户名和密码 解决方法 操作步骤 1.按WINR键打开运行&#xff0c;输入gpedit.msc打开本地组策略编辑器 2.按如…

五种算法(BWO、RUN、SO、HO、GWO)求解复杂城市地形下无人机路径规划,可以修改障碍物及起始点(MATLAB)

一、算法介绍 &#xff08;1&#xff09;白鲸优化算法BWO 参考文献&#xff1a;Zhong C, Li G, Meng Z. Beluga whale optimization: A novel nature-inspired metaheuristic algorithm[J]. Knowledge-Based Systems, 2022, 109215. &#xff08;2&#xff09;龙格-库塔优化…

【Android学习】简单的登录页面和业务逻辑实现

实现功能 1 登录页&#xff1a;密码登录和验证码登录 2 忘记密码页&#xff1a;修改密码 3 页面基础逻辑 java代码 基础页面 XML login_main.xml <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.and…

Agent AI:智能代理的未来

&#x1f388;写在前面 &#x1f64b;‍♂️大家好呀&#xff0c;我是超梦梦梦梦 &#x1f64b;‍♂️ 小伙伴们如果在学习过程中有不明白的地方&#xff0c;欢迎评论区留言提问&#xff0c;小梦定知无不言&#xff0c;言无不尽。 目录 一、Agent AI的起源与发展 二、Agent A…

js,JavaScript 对象(2024-05-02)

对象是 JavaScript 的数据类型之一。 对象用于存储键/值&#xff08;名称/值&#xff09;集合。 JavaScript 对象是命名值的集合。 下例创建具有四个键/值属性的 JavaScript 对象&#xff1a; const person {firstName: "Bill",lastName: "Gates",age:…

Linux中的简单操作 ls/tar/pwd/cd/mkdir/touch 等

目录 前言 安装和卸载软件包 ls 查看指定路径下的文件和文件夹 tar 解压缩/压缩命令 pwd 查看当前路径 cd 改变目录 mkdir 创建目录 递归创建 rm rmdir 删除文件或目录 touch 创建文件 ll、echo、重定向符&#xff08;>,>>&#xff09; ll echo 重定向符…

嵌入式C语言高级教程:实现基于STM32的无线远程监控系统

无线远程监控系统可以广泛应用于安防、环境监测等领域&#xff0c;提供实时数据传输和警报功能。本教程将指导您如何在STM32微控制器上实现一个基本的无线远程监控系统。 一、开发环境准备 硬件要求 微控制器&#xff1a;STM32L476RG&#xff0c;特别适合低功耗应用。开发板…

MySQL数据库实验三

本文承接前面的俩次实验基础上完成&#xff0c;不过实现的都是基础操作的练习 目录 目录 前言 实验目的 实验要求 实验内容及步骤 updata操作 delete操作 alter操作 添加列 删除列 修改列的数据类型 要求实现 实验结果 代码结果 注意事项 思考题 总结 前言 本文是MySQL数据库…

c++11 lambda 捕获,匿名,返回类型后置

lambda就是即写即用的匿名函数&#xff0c;可以用于解决匹配函数参数的问题 int main(int argc,char *argv[]) {vector<int> v{1,2,3,4,5,6,7,8};for_each(v.begin(),v.end(),[](int a){cout<<a;});return 0; } for_each是固定函数&#xff0c;我们需要他但是又没…

MySQL中JOIN连接的实现算法

目录 嵌套循环算法&#xff08;NLJ&#xff09; 简单嵌套循环&#xff08;SNLJ&#xff09; 索引嵌套循环&#xff08;INLJ&#xff09; 块嵌套循环&#xff08;BNLJ&#xff09; 三种算法比较 哈希连接算法&#xff08;Hash Join&#xff09; 注意事项&#xff1a; 工…

分享5个免费AI一键生成毕业论文的网站

一、引言 对于忙碌的学生来说&#xff0c;毕业论文通常是一项艰巨的任务。幸运的是&#xff0c;随着人工智能技术的发展&#xff0c;现在有一些工具可以帮助学生轻松完成论文。本文将介绍五个免费的AI工具&#xff0c;它们能够一键帮助你生成毕业论文&#xff0c;让你的学术生…