【牛客SQL快速入门】SQL基础(三)

news2024/11/28 8:39:09

一、条件函数

IF 条件函数

IF函数是最常用到的条件函数,写法为 if(x=n,a,b),x=n代表判断条件,如果x=n时,那么结果返回a,否则返回b。

-- 把非北京大学的用户统一归为其他大学
Select device_id,if(university = ‘北京大学',’北京大学',’其他大学')
as university
From user_profile

Case when

case when与if的作用基本相同,也是按照条件更换列中的内容,区别是case when可以对多个条件进行转换。

举个🌰:

 score为A的情况下,值替换为优,B替换为良,C替换为中,其余情况全部替换为不及格。

Select
CASE
WHEN SCORE = 'A' THEN '优'
WHEN SCORE = 'B' THEN '良'
WHEN SCORE = 'C' THEN ‘中'
ELSE ‘不及格'
END --注意这里需要加end作为结束

二、日期函数

在DBMS中日期和时间值以特殊的格式存储,以便能快速和有效地排序或过滤。

常见的日期数据格式有两种:'yyyy-MM-dd' 和 'yyyyMMdd'。

时间戳-日期格式转化

时间戳是数据库中自动生成的唯一二进制数字,表明数据库中数据修改发生的相对顺序,其记录形式类似:1627963699 ,在实际工作环境中,对于用户行为发生的时间通常都是用时间戳进行记录,时间戳和日期格式之间可以利用from_unixtime和 unix_timestamp进行转换。

from_unixtime可以将时间戳转换成日期,unix_timestamp可以将日期转换回时间戳。

举个🌰:

-- from_unixtime
select
from_unixtime(time,'yyyy-MM-dd') as time
From question_practice_detail

-- unix_timestamp
select
unix_timestamp('2021-08-01','yyyy-MM-dd') as time

年月日截取

对于常见的日期格式,类似’2021-08-01’,有时候在聚合计算时我们会想将日期中的年、月、日分别提取出来,这时应该怎么做呢?SQL为此提供了对应的年、月、日提取函数,分别为year(), month(), day()。

select year('2021-08-01'),month('2021-08-01'),day('2021-08-01')

日期差计算

-datediff

datediff的作用为计算两个日期之间的天数间隔,语法为datediff(date1,date2),返回起始时间 date1 和结束时间 date2 之间的天数,date1大于date2的情况下,返回的天数为正数,date1小于date2的情况下,返回的天数为负数。

select datediff('2021-08–09','2021-08-01')
-- output : 8
-date_sub

语法为date_sub (string startdate, interval int day) ,返回开始日期startdate减少days天后的日期

select date_sub('2021-08–09',interval 8 day)
-- Output :‘2021-08-01'
-date_add

语法为date_add(string startdate, interval int day) ,返回开始日期startdate增加days天后的日期

select date_add('2021-08–01',interval 8 day)
-- Output : ‘2021-08-09'

三、文本函数

长度 —length

length函数返回文本字段中值的长度

select length(‘abc’)
-- 3

连接 —concat

CONCAT函数用于将两个或多个字符串连接起来,形成一个单一的字符串

select concat(‘abc’,’bcd’,’ff')
-- ‘abcbcdff'

分割 —SUBSTRING_INDEX

SUBSTRING_INDEX函数用于将字符串依据某个指定分隔符进行切分并返回指定位置分隔符的字符。(字段分割符,位置)

举个🌰:

        假如现在有一列字段以字符串记录了用户的身高体重和性别,如 ‘180,78kg,male',现 在想要分别取出用户的身高和体重,应该怎么做呢?

        这时就可以用到 SUBSTRING_INDEX函数,指定逗号作为分隔符,如果想要返回身高的话,位置填1,即 可得到相应结果。

select SUBSTRING_INDEX('180,78kg',',','1') as height

        如果想要取出体重怎么办?可以嵌套一次SUBSTRING_INDEX查询,负数位置代表从后向前取,-1代表最后一位,第二层嵌套相当于是取出’180,78kg'的最后一个逗号后的字符,得到我们想要的体重数据

select SUBSTRING_INDEX(SUBSTRING_INDEX('180,78kg',',’,'2’),’,’,-1) as height

定位 —instr

instr(substr,str):返回substr字符串在str里第一次出现的位置,从1开始,没有则返回0

select instr('bacd','a')
-- 2

截取 —substring

substr(string A,int start,int len),返回字符串A从下标start位置开始,长度为len的字符串

substring(string A,int start),在不指定返回字符串长度的情况下,返回字符串A从下标start位置到结尾的字符串

select substring(‘bacda’,2)
-- ’acda’
select substring(‘bacda’,2,2)
-- 'ac'

四、窗口函数

row_number() over partition by

函数的含义为先分组再排序, row_number() over (partition by col1 order by col2),表示根据col1分组,在分组内部根据col2排序

举个🌰:

        在每个学校的内部根据gpa进行一次排名,获得每个学生在学校的名次数据,desc代表是按照从大到小降序排列。

Select device_id, university, gpa,
row_number() over (partition by university order by gpa desc) as
rank. - -desc代表降序排列
From user_profile

注意: 输出结果 rank 会根据排序结果自动赋值

lead()/leg() over (partition by col1 order by col2)

lag() over() 与 lead() over() 函数是跟偏移量相关的两个分析函数,通过这两个函数可以在一次查询中取出同一字段的前 N 行的数据 (lag) 和后 N 行的数据 (lead) 作为独立的列, 从而更方便地进行进行数据过滤。这种操作可以代替表的自联接,并且 LAG 和 LEAD 有更高的效率。

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

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

相关文章

C++设计模式:享元模式(十一)

1、定义与动机 概述:享元模式和单例模式一样,都是为了解决程序的性能问题。面向对象很好地解决了"抽象"的问题,但是必不可免得要付出一定的代价。对于通常情况来讲,面向对象的成本大豆可以忽略不计。但是某些情况&#…

T2.数据库原理

2.1 关系模型概述 1.域 域: 一组有相同数据类型的值得集合 2.笛卡尔积 笛卡尔积: 设任意的N个域D1,D2,…,Dn。 3、关系的定义和性质 (1)关系的数学定义: 在笛卡儿积中取出有实际意义的元组来构造关系。 关系也是…

R语言绘制一次和二次相关性热图

在数据探索的过程中,我们往往会对数据与数据的相关性进行分析,例如我们常用的corrplot包,或者psych包中的corr.test函数,对两两变量间的相关性进行分析。我们常常会看到这样的相关性热图: 但有时变量间的关系并非线性…

new mars3d.thing.Sightline({ 实现航线穿透山体/模型部分的虚线效果且不随视角变化而变化

摘要:new mars3d.thing.Sightline({ 实现航线穿透山体/模型部分的虚线效果且不随视角变化而变化,避免depthFailMaterial材质随着视角变化遮挡部分也会虚线效果。 前置说明: 1.不可视区域颜色hiddenColor支持设置材质,实现穿过山…

【spring】@PostConstruct和@PreDestroy注解学习

PostConstruct和PreDestroy介绍 PostConstruct和PreDestroy是Java EE(Enterprise Edition)和Java SE(Standard Edition)中的注解,它们用于指定一个bean在其生命周期的特定点应该执行的方法。 这两个注解是JSR250规范中…

【高端电流检测IC储能产品应用方案】耐压28V侧轨的电流检测芯片FP130A 应用于电脑电源,开关电源以及多口快充充电器,户外移动电源,适配器,电池充电器等

电流检测技术常用于高压短路保护、电机控制、DC/DC换流器、系统功耗管理、二次电池的电流管理、蓄电池管理等电流侦测等场景。对于大多数应用而言,都是间接测量电阻两端的跨压差来获取待测电流。 如下面的高端电流检测芯片FP130A,丝印是FC915。电路原理图…

MySQL 全文检索

不是所有的数据表都支持全文检索 MySQL支持多种底层数据库引擎,但是并非所有的引擎支持全文检索 ,目前最常用引擎是是MyISAM和InnoDB;前者支持全文检索,后者不支持。 booolean模式操作符 操作符含义必须有-必须不包含>包含对应…

Unity 中画线

前言: 在Unity项目中,调试和可视化是开发过程中不可或缺的部分。其中,绘制线条是一种常见的手段,可以用于在Scene场景和Game视图中进行调试和展示。本篇博客将为你介绍多种不同的绘制线条方法,帮助你轻松应对各种调试…

rust使用print控制台打印输出五颜六色的彩色红色字体

想要在控制台打印输出彩色的字体,可以使用一些已经封装好的依赖库,比如ansi_term这个依赖库,官方依赖库地址:https://crates.io/crates/ansi_term 安装依赖: cargo add ansi_term 或者在Cargo.toml文件中加入&#…

HWOD:在含有空格的字符串中统计大写字母的个数

一、知识点 回车键的ASCII码是10 二、题目 1、描述 找出给定字符串中大写字符(即A-Z)的个数。 数据范围:字符串长度:1≤∣s∣≤250 字符串中可能包含空格或其他字符 2、输入 对于每组样例,输入一行,代表待统计的字符串 …

DCDC 5V2A电源升压芯片FP6276BXR-G1 FP6298XR-G1

一、FP6276BXR-G1 3.7v升5V2A同步升压输入电压:2.4V-4.5V FP6276B是一个具有PWM/PSM控制的电流模式增压直流-直流转换器。它的PWM电路内置40mΩ高侧开关和40mΩ低侧开关使该调节器高高效。内部补偿网络还将外部组件计数最小化到只有6个。一个内部的0.6V电压被连接到误差放大器…

玩机进阶教程------手机定制机 定制系统 解除系统安装软件限制的一些步骤解析

定制机 在于各工作室与商家合作定制rom中有一些定制机。限制用户私自安装第三方软件。或者限制解锁 。无法如正常机登陆账号等等。定制机一般用于固定行业或者一些部门。专机专用。例如很多巴枪扫描机型等等。或者一些小牌机型。对于没有官方包的机型首先要导出各个分区来制作…

Java快速入门系列-8(Web开发基础)

第8章 Web开发基础 8.1 Servlet与JSP8.1.1 Servlet简介8.1.2 JSP简介与使用8.1.3 Servlet与JSP协作8.2 Web服务器与Tomcat8.2.1 安装与配置Tomcat8.2.2 配置与管理Web应用8.3 MVC设计模式与Java Web应用8.3.1 MVC原理8.3.2 MVC在Java Web中的应用8.4 RESTful API设计与实现8.4.…

学习R语言第二天

R语言可以做什么 1.数据分析 R语言如何使用 1. 请看我的操作方式 2. 如何获取当前路径 -- 获取当前路径 > getwd() [1] "E:/R/RWorkSpace/day01" -- 修改当前路径 > setwd(dir "E:/R") > getwd() [1] "E:/R" 3.查看当下数据值的信…

计算机毕业设计 工厂车间设备管理系统php+vue.js

该系统是以PHP为主要开发语言,集合MySQL数据库技术构建基于Web的以信息为目标的,动态的交互平台 PHP与Apache,MySQL的组合虽然有着诸多优势,但三种出自不同作者的开源软件要能很好的配合工作,需要很多手工配置&#x…

源码解析HashMap的put方法

前言 HashMap 基于哈希表的 Map 接口实现,其中的值是以 key-value 存储形式存在,即主要用来存放键值对。它的 key、value 都可以为 null,此外,HashMap 中的映射不是有序的。那么本篇文章将从源码的角度来很详细地讲解HashMap中pu…

5G智慧水利数字孪生可视化平台,推进水利行业数字化转型

5G智慧水利数字孪生可视化平台,推进水利行业数字化转型。随着5G技术的快速发展,越来越多的行业开始探索数字化转型的道路。水利行业作为国民经济的重要支柱,也面临着数字化转型的迫切需求。5G智慧水利数字孪生可视化平台作为水利行业数字化转…

微服务-7 Docker

一、镜像、容器、仓库 容器是镜像的实例,仓库中存储着镜像。 二、镜像的操作 三、容器的操作 创建容器停止容器,查看后发现没有了(docker ps 默认只展示没有停止的) docker ps -a (可以展示运行中和停止的镜像)删除容器:(docker rm 不能删除…

LangChain-18 Caching 将回答内容进行缓存 可在内存中或数据库中持久化缓存

背景描述 可以将问答的内容缓存起来,如果是相同的问题,那么将会直接把答案返回去,可以节约费用和计算。 安装依赖 pip install -qU langchain-core langchain-openai编写代码 我们可以通过 InMemoryCache 进行内存缓存 或者 SQLiteCache …

【C++题解】1605. 求一个两位数的个位和十位的和

问题:1605. 求一个两位数的个位和十位的和 类型:基本运算、拆位求解。 题目描述: 从键盘读入一个两位的整数 n ,请求出这个两位整数个位和十位的和是多少? 输入: 一个两位的整数 n 。 输出&#xff1a…