mysql8.0常用语法

news/2024/9/24 12:39:18/

文章目录

  • 开窗函数
  • 字段拆分
  • 递归关联查询

开窗函数

开窗函数 ,可以按组查询排列数据,且给每一行值都返回指定的聚合值,语法如下:

开窗函数 over([PARTITION BY 分组字段(多个用,链接)]  [ORDER BY 排序字段(同前)])

开窗函数分为两类:
聚合开窗函数:sum,avg,count,max,min等
专用开窗函数:Rank,Dense_Rank,Row_Number 等
注意:聚合开窗函数使用ORDER BY时,必须跟在PARTITION BY之后。不能单独使用
详细教程可参看:Mysql开窗函数

字段拆分

有如下表 friend

namesexfriend
张三26丽丽,红红,娜娜

现在因为某些需求,需要把friend字段进行拆分,并且和name、sex再次组成一条新的数据进行展示,如下

namesexfriend
张三26丽丽
张三26红红
张三26娜娜

此时可以使用CROSS JOIN 函数,把friend进行拆分作为一个虚拟表后进行联表查询,语法如下

SELECT name,sex,jt.value
FROM friend
CROSS JOIN JSON_TABLE(friend,'$[*]' COLUMNS(value INT PATH '$')
) AS jt where name="张三"

从名字我们可以看出,该函数是对json字符串进行拆分的,而我们的frend字段存的不是json字符串,所以需要进行处理,把friend字段拼接成json字符串,如下

CONCAT('["',replace(friend,',','","'), '"]')

递归关联查询

– 假定有如下的关联表结构

CREATE TABLE relations (parent_id INT,child_id INT,PRIMARY KEY (parent_id, child_id)
);

– 插入现有关系

INSERT INTO relations (parent_id, child_id) VALUES
(1, 2), -- a -> b
(2, 3), -- b -> c
(3, 4); -- c -> d

– 新增关系

INSERT INTO relations (parent_id, child_id) VALUES
(4, 5); -- d -> e

– 递归查询来找到e的所有关联节点

WITH RECURSIVE cte_relations AS (SELECT child_id, parent_id FROM relations WHERE child_id = 5UNION ALLSELECT p.child_id, p.parent_id FROM relations pINNER JOIN cte_relations c ON p.child_id = c.parent_id
) SELECT * FROM cte_relations;

在这个查询中,CTE首先选出了与e直接关联的d,然后递归地向上找到d、c、b、a的关系。

注意,以上查询可能会出现死循环
比如,当数据中加入了parent_id = 5,child_id=1时,上面的递归查询会出现死循环,此时我们只需进行如下修改即可

WITH RECURSIVE cte_relations AS (SELECT child_id, parent_id FROM relations WHERE child_id = 5UNION ALLSELECT p.child_id, p.parent_id FROM relations pINNER JOIN cte_relations c ON p.child_id = c.parent_id where c.parent_id<>5
) SELECT * FROM cte_relations;

该查询将查询出所有和5有关系的数据


http://www.ppmy.cn/news/1461237.html

相关文章

83.网络游戏逆向分析与漏洞攻防-移动系统分析-游戏瞬移漏洞的测试与分析

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 如果看不懂、不知道现在做的什么&#xff0c;那就跟着做完看效果&#xff0c;代码看不懂是正常的&#xff0c;只要会抄就行&#xff0c;抄着抄着就能懂了 内容…

相机模型,坐标变换,畸变

小孔成像模型 墨子就记录了小孔成像是倒立的。这从几何光学的角度是很好理解的&#xff1a;光沿直线传播&#xff0c;上方和下方的光线交叉&#xff0c;导致在成像平面位置互换。 小孔的大小有什么影响&#xff1f; 小孔越大&#xff0c;进光量变大了&#xff0c;但是成像平…

(Arcgis)python geopandas库分割shp属性表特定内容,批量导出shp文件

一、两个文件。实现目标&#xff1a;从1个shp文件&#xff0c;根据属性表内容提取成200个shp文件&#xff0c;文件名取自txt文本内容 shp文件&#xff08;要素1-200.shp&#xff09;&#xff1a;打开属性表前14项相同&#xff0c;后200项不相同。 ————任务目标&#xff1a…

a-auto-complete 请求后端数据做模糊查询,解决下拉框选择选不上,不回显的问题

a-auto-complete 请求后端数据做模糊查询&#xff0c;解决下拉框选择选不上&#xff0c;不回显的问题 记录一个a-auto-complete卡bug卡了两天&#xff0c;找不到哪里的问题下拉框选择选不上&#xff0c;不回显&#xff0c;最后终于解决了。 我还对下拉框显示的内容做了小调整。…

ros大车学习2024.3.28-2024.5.14小结(1)

ros一键安装推荐wget http://fishros.com/install -O fishros && . fishros (原本的资料的是melodic的&#xff0c;因为资料里面的镜像是ubuntu18.04的&#xff0c;而我用的是鲁班猫sk3566,ubuntu20.04&#xff0c;镜像来源于野火官网)首先获取新noetic源码2024.5.13从…

多源bfs,LeetCode 994. 腐烂的橘子

一、题目 1、题目描述 在给定的 m x n 网格 grid 中&#xff0c;每个单元格可以有以下三个值之一&#xff1a; 值 0 代表空单元格&#xff1b;值 1 代表新鲜橘子&#xff1b;值 2 代表腐烂的橘子。 每分钟&#xff0c;腐烂的橘子 周围 4 个方向上相邻 的新鲜橘子都会腐烂。 返…

实现vant的年月日时分秒组件

方法&#xff1a;van-datetime-picker&#xff08;type&#xff1a;datetime&#xff09;和 van-picker结合实现。 <template><div class"datetimesec-picker"><van-datetime-pickerref"timePickerRef"type"datetime" //年月日时…

一款开源的PHP版本的网盘程序

下面的是我用kimi文件助手总结的。 标题 zyx0814/Pichome: 一款图片与媒体文件管理功能强大的开源网盘程序 链接 GitHub 仓库演示地址 开发背景 数字化时代&#xff0c;媒体文件成为信息传递的核心载体&#xff0c;传统网盘管理方式不足。 技术基础 开发语言: PHP数据库…