mysql高级用法常用函数
mysql高级用法
1、自定义排序
select *
from movies
order by field(actors, '成龙', '靳东', '刘亦菲', '范冰冰');
// 字段中存在null值
select *
from movies
order by field
(coalesce(actors,'null'),'成龙', '靳东', '刘亦菲', '范冰冰','null')
2、空值NULL排序(ORDER BY IF(ISNULL))
order by if(isnull(字段),0,1)语法将null值转化为0或1,实现null值数据排序到数据集前面还是后面
// 如果actors为null时,赋值为0,不为null时,赋值为1.
select * from movies order by actors,price desc;
select * from movies order by if(ISNULL(actors),2,1),actors,price desc;
3、CASE表达式(CASE。。。WHEN)
select *,case when price > 80 then '高'else '低' end as levelfrom movies;
4、分组连接函数(GROUP_CONCAT)
分组连接函数可以在分组后指定字段的字符串连接方式,并且还可以指定排序逻辑,连接符默认为英文逗号。也可以加distinct
select actors,group_concat(movie_name),group_concat(price) from movies group by actors;select actors,group_concat(movie_name order by price desc separator '_'),group_concat(price order by price desc separator '_')
from movies group by actors;
5、分组统计数据后再进行统计汇总(with rollup)
with rollup在分组统计数据的基础上再进行数据统计汇总,即将分组后的数据进行汇总
select actors,sum(price) from movies group by actors with rollup ;
6、子查询提取(WITH AS)
查询中多个子查询需要使用同一个子查询结果
with m1 as(select * from movies where price > 50),m2 as(select * from movies where price >= 65)
select * from m1 where m1.id not in(select m2.id from m2) and m1.actors = '刘亦菲'
7、优雅处理数据插入,更新时主键,唯一键重复
更新数据时,有时会遇到主键重复的场景
1、插入数据时使用ignore,作用时插入的值遇到主键或唯一键重复时自动忽略重复的数据,不影响后面数据的插入,有则忽略,无则插入。
insert ignore into movies(id,movie_name,actors,price,release_date)
values (13,'神话','成龙',100,'2022-11-11')2、使用replace关键字,当插入的记录遇到主键或者唯一键重复时先删除表中重复的记录行再插入,即有则删除+插入,无则插入
replace into movies(id,movie_name,actors,price,release_date)
values (13,'神话','成龙',100,'2022-11-11')3、更新数据时使用on duplicate key update。作用就是当插入的记录遇到主键或者唯一键重复时,会执行后面定义的update操作,相当于先执行insert操作,再根据主键或者唯一键执行update操作,即有则更新,无则插入
insert into movies(id,movie_name,actors,price,release_date)
values (12,'神话','成龙',100,'2022-11-11') on duplicate key update price = price + 10
8、分页查询慢sql优化
1、order by 和 select 字段加联合索引
alter table t_file add index idx_score_date_name(score,release_date,film_name)
select score,release_date,film_name from t_film order by score desc limit 90000,20;
2、order by 字段加索引并手动回表
select score,release_date,film_name from t_film a join
(select id from t_film order by score desc limit 900000,20) b on a.id = b.id
9、sql索引的分类
1、创建索引
create [unique|fulltext] index index_name on table_name(index_col_name,...)
2、查看索引
show index from table_name;
3、删除索引
drop index index_name on table_name;
例如:
普通索引:
create index idx_user_name on tb_user(name)
唯一索引:
create unique index idx_user_phone on tb_user(phone);
联合索引:
create index idx_user_pro_age_sta on tb_user(profession,age,status);
10、mysql常用函数
1、日期函数
1、Date函数
对于数据库中存在Timestamp类型可以使用DATE()转换
select user_id,DATE(create_at) from test_enum
2、if函数
1、if(expression,v1,v2) 如果表达式expression成立,返回结果v1,否则,返回结构v2
select user_id,user_name,if(user_sex = '0', '女', if(user_sex = '1', '男', '未知')) as userSex,user_status
from test_enum;
2、ifnull(v1,v2),如果v1的值不为null,则返回v1,否则返回v2
select user_id,user_name,ifnull(user_sex,'男'),user_status
from test_enum;
3、isnull(expr) 如果expr的值为null,则返回1,如果expr的值不为null,则返回0,可用于含有null值的排序。
select user_id,user_name,user_status,isnull(user_sex)
from test_enum;
4、nullif(expr1,expr2)比较两个字符串,如果字符串expr1和expr2相等,返回null,否则返回expr1
3、数据类型转换函数CAST():函数可以将任何类型的值转换为具有指定类型的值,利用该函数可以直接在数据库层处理部分因数据类型引起的问题
支持的类型:
BINARY 二进制型
CHAR 字符型
DATE 日期,格式为 ‘YYYY-MM-DD’
DATETIME 日期加具体的时间,格式为 ‘YYYY-MM-DD HH:MM:SS’
TIME 时间,格式为 ‘HH:MM:SS’
DECIMAL float 型
SIGNED int 型
UNSIGNED 无符号int
1、int类型值转为CHAR 字符型
select user_name,cast(user_status as char ) from test_enum;
2、固定时间字符串转为DATE 日期,格式为 'YYYY-MM-DD’
select user_name,cast(user_status as char ),cast(create_at as date) from test_enum;
3、固定时间字符串转为DATETIME 日期加具体的时间,格式为 'YYYY-MM-DD HH:MM:SS’
SELECT CAST('2019-08-29 16:50:21' as DATETIME) as result
4、固定时间字符串转为TIME 时间,格式为 'HH:MM:SS’
SELECT CAST('2019-08-29 16:50:21' as TIME) as result
运行结果:16:50:21
5、float型值通过DECIMAL 获取精度
SELECT CAST(220.23211231 AS DECIMAL(10, 3)) AS result
运行结果:220.232
6、固定字符串转为SIGNED int 型
SELECT CAST("12321" AS SIGNED ) AS result
运行结果:12321
7、固定字符串转为UNSIGNED 无符号int
SELECT CAST("12321" AS UNSIGNED ) AS result
运行结果:12321
4、格式化函数FORMAT(x,n)
FORMAT(x,n)函数可以将数字x进行格式化,将x保留到小数点后n位。这个过程需要进行四舍五入。例如FORMAT(2.356,2)返回的结果将会是2.36;FORMAT(2.353,2)返回的结果将会是2.35。下面使用FORMAT(x,n)函数来讲235.3456和235.3454进行格式化,都保留到小数点后3位。
11、窗口函数
相关文章:
mysql高级用法常用函数
mysql高级用法 1、自定义排序 select * from movies order by field(actors, 成龙, 靳东, 刘亦菲, 范冰冰); // 字段中存在null值 select * from movies order by field (coalesce(actors,null),成龙, 靳东, 刘亦菲, 范冰冰,null)2、空值NULL排序(ORDER BY IF(ISN…...
【打印100个常用Linux命令】
#!/bin/bash 定义一个函数,用于打印100个常用Linux命令 print_commands() { echo “以下是一些常用的Linux命令:” echo “----------------------------------” echo “1. pwd - 显示当前工作目录” echo “2. ls - 列出当前目录下的文件和文件夹” …...

友情提示:lazarus的tsortgrid.autofillcolumns存在BUG
直接在tsortgrid的属性中设置autofillcolumns为true,会提示:123个错误。即使修改为false,编译运行照样会出现上述错误。唯一解决的办法就是删除sortgrid重新添加一个。 代码设置SortGrid1.AutoFillColumns : TRUE不受影响。...
github的个人readme文件
一个好的svg图: Simon-He95/profile-3d-contrib/profile-season-animate.svg at 4281d9f46e3d5416bd8f8cc5779157bfdaa8589d Simon-He95/Simon-He95 GitHub 请访问他的主页从提交记录就可以看到这个立体的登录github的图...
java面试题: HashMap、HashSet 和 HashTable 的区别
HashMap 常用方法 HashMap 是一个基于哈希表的 Map 接口的实现。它允许使用 null 值和 null 键。 java 复制 // 创建一个HashMap HashMap<KeyType, ValueType> map new HashMap<>(); // 添加元素 map.put(key, value); // 获取元素 ValueType value map.get…...

CPP初级:模板的运用!
目录 一.泛型编程 二.函数模板 1.函数模板概念 2.函数模板格式 3.函数模板的原理 三.函数模板的实例化 1.隐式实例化 2.显式实例化 3.模板参数的匹配原则 四.类模板 1.类模板的定义格式 2.类模板的实例化 一.泛型编程 泛型编程:编写与类型无关的通用代码…...
排序---基数排序
前言 个人小记 一、简介 基数排序是一种非比较排序,所以排序速度较快,当为32位int整数排序时,可以将数分为个位十位分别为2^16,使得拷贝只需要两轮,从而达到2*n,然后给一个偏移量,使得可以对负数排序。以…...

“新高考”下分班怎么分?
来自安徽的张女士告诉我:上一年孩子升入了高中,但没想到才高一,孩子就面临了一个困难的挑选:312”分班! 什么是312”分班呢?许多人或许不明白,便是要求学生在高一入学时,针对于3门必…...
二叉树的层序遍历-力扣
本题是二叉树的层序遍历,通过一个队列来控制遍历的节点,二叉树每层的节点和上一层入队的节点个数是相同的,根据这一点编写循环条件。 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* …...

N32G45XVL-STB之移植LVGL(lvgl-8.2.0)
目录 概述 1 软硬件介绍 1.1 软件版本信息 1.2 ST7796-LCD 1.3 MCU IO与LCD PIN对应关系 2 认识LVGL 2.1 LVGL官网 2.2 LVGL库文件下载 3 移植LVGL 3.1 准备移植文件 3.2 添加lvgl库文件到项目 3.2.1 src下的文件 3.2.2 examples下的文件 3.2.3 配置文件路径 3.2…...
【设计模式】创建型设计模式之 原型模式
介绍 原型模式是一种创建型设计模式,主要用于创建重复的对象,而无需重新初始化它们,从而提高效率并简化对象的创建过程。此模式的核心思想是利用已存在的对象实例,通过复制(克隆)的方式来生成新的对象&…...

【类型商店】字符字符串(下)
啊,哈喽,小伙伴们大家好。我是#Y清墨,今天呐,我要介绍的是字符与字符串。 导语 前两期,我们已经懂得了概念,今天来看些函数。 正题 一.增加或连接 (1) 后面增加() string s1,s2; //定义 s…...

『 Linux 』内存管理与文件系统
文章目录 交换分区页与页框(页帧)交换分区与内存之间的交换操作系统如何管理内存物理地址转换页号与页内偏移量 内存管理,文件系统与文件管理之间的联系 交换分区 在Linux的安装过程中,用户将会被提示创建一个交换分区; 这是一个特殊的分区,其大小可以由用户根据系统内存需求和…...

线性代数|机器学习-P8矩阵低秩近似eckart-young
文章目录 1. SVD奇异值分解2. Eckart-Young2.1 范数 3. Q A Q U Σ V T QAQU\Sigma V^T QAQUΣVT4. 主成分分析图像表示 1. SVD奇异值分解 我们知道,对于任意矩阵A来说,我们可以将其通过SVD奇异值分解得到 A U Σ V T AU\Sigma V^T AUΣVT࿰…...

平面设计神器CorelDRAW2021精简版,你值得拥有!
亲爱的设计师小伙伴们,今天我要为大家种草一款神奇的软件——CorelDRAW平面设计软件2021精简版!🤩✨作为一名专业的图形设计师,我深知一个好工具对于我们的工作有多么重要。而这款软件简直就是我们设计师的救星!&#…...
kafka是什么?
Kafka是一个由Apache软件基金会开发的开源流处理平台,最初由LinkedIn公司开发,使用Scala和Java编写。它是一个高吞吐量的分布式发布订阅消息系统,可以处理消费者在网站中的所有动作流数据,如网页浏览、搜索和其他用户行为等。Kafk…...
ABC351
C 栈的应用 #include<bits/stdc.h>using namespace std;stack<int>stk;int main() {int n;cin>>n;for(int i1;i<n;i){int a;cin>>a;while(!stk.empty()&&astk.top()){stk.pop();a;}stk.push(a);}cout<<stk.size()<<endl;retur…...
base上海,数据科学,数据挖掘,数据分析等岗位求收留
裁员了,base上海,数据科学,数据挖掘,数据分析等岗位,期望30k~40k,求推荐求收留 1,6年数据算法工作,做过指标体系搭建,用户画像,货品定价,社区分析…...

IC元器件
1.电阻: 电阻的作用: 1.与负载串联:做限流分压 2.电阻并联:将小功率电阻并联成大功率,防烧毁 2.电容: 电容就是两块金属板+中间的介质(相当于两个人坐在一起加上中间的空气…...

SQL159 每个创作者每月的涨粉率及截止当前的总粉丝量
描述 用户-视频互动表tb_user_video_log iduidvideo_idstart_timeend_timeif_followif_likeif_retweetcomment_id110120012021-09-01 10:00:002021-09-01 10:00:20011NULL210520022021-09-10 11:00:002021-09-10 11:00:30101NULL310120012021-10-01 10:00:002021-10-01 10:00…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...

stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...
基于Uniapp开发HarmonyOS 5.0旅游应用技术实践
一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...
Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?
在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...