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…...
Pi0+AR:远程维修指导系统开发
Pi0AR:远程维修指导系统开发实战 今天咱们聊一个特别实用的场景——怎么用AI大模型和AR眼镜,搞一套远程维修指导系统。 想象一下这个画面:工厂里一台设备突然出故障了,现场的技术人员可能经验不足,不知道该怎么修。这…...
Cosmos-Reason1-7B辅助Anaconda环境管理:创建专属模型推理Python环境
Cosmos-Reason1-7B辅助Anaconda环境管理:创建专属模型推理Python环境 你是不是也遇到过这种情况?想在自己的电脑上跑一下Cosmos-Reason1-7B这类大模型试试效果,结果光是配环境就折腾了大半天。Python版本不对,各种依赖包冲突&…...
Android13 编译ninja失败:exit status 137 的内存优化实战
1. 遇到exit status 137时的排查思路 第一次看到ninja编译报exit status 137时,我也是一头雾水。明明机器配置不差,32G内存的Ubuntu服务器,怎么会在编译Android13时出现内存不足?后来发现这个问题在大型项目编译中其实很常见&…...
Android开发必看:Sentry SDK接入中的5个隐藏技巧(含混淆配置避坑)
Android开发必看:Sentry SDK接入中的5个隐藏技巧(含混淆配置避坑) 在移动应用开发中,错误监控是保证应用质量的关键环节。Sentry作为一款强大的错误监控工具,为Android开发者提供了全面的崩溃报告和性能监控能力。然而…...
NEURAL MASK幻镜效果可视化:边缘像素级误差分布统计图表
NEURAL MASK幻镜效果可视化:边缘像素级误差分布统计图表 1. 引言:从艺术到科学的抠图精度分析 当我们谈论AI抠图工具时,往往只关注最终效果是否"看起来不错",但专业创作者需要更精确的量化标准。NEURAL MASK幻镜作为基…...
Nano-Banana Studio作品分享:极简纯白风牛仔外套平铺拆解图
Nano-Banana Studio作品分享:极简纯白风牛仔外套平铺拆解图 你有没有想过,一件看似普通的牛仔外套,如果把它像乐高积木一样“拆开”平铺,会是什么样子?那些缝线、纽扣、口袋、布料纹理,以一种极简、有序的…...
如何高效生成精准同步字幕?OpenLRC让音频转LRC变得智能又简单
如何高效生成精准同步字幕?OpenLRC让音频转LRC变得智能又简单 【免费下载链接】openlrc Transcribe and translate voice into LRC file using Whisper and LLMs (GPT, Claude, et,al). 使用whisper和LLM(GPT,Claude等)来转录、翻译你的音频为字幕文件。…...
Python零基础入门:从安装到运行第一个TranslateGemma示例
Python零基础入门:从安装到运行第一个TranslateGemma示例 1. 这不是传统编程课,而是帮你打开AI翻译世界的第一扇门 你可能已经听说过AI翻译工具,但真正自己动手跑通一个专业级的翻译模型,感觉会完全不同。这不是要你成为Python专…...
Camunda工作流多实例实战:会签与多人审批的配置与优化
1. 理解Camunda多实例工作流的核心概念 第一次接触Camunda多实例配置时,我被"会签"这个概念卡住了三天。当时项目急着上线,客户要求实现一个采购审批流程:5个部门负责人需要全部签字才能生效。传统做法可能要创建5个独立任务节点&a…...
OpenClaw安全实践:限制Qwen3-32B权限的本地自动化方案
OpenClaw安全实践:限制Qwen3-32B权限的本地自动化方案 1. 当AI获得系统权限时我们在担心什么 第一次看到OpenClaw的演示视频时,我被它流畅的自动化操作震撼了——自动整理文件夹、批量重命名照片、甚至帮我回复邮件。但当我真正准备在自己的MacBook上部…...
