mysql8.0常用语法

文章目录

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

开窗函数

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

开窗函数 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.mzph.cn/pingmian/12067.shtml

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

相关文章

【JVM】从三种认知角度重识JVM

目录 JVM概述 JVM主要功能 虚拟机是Java平台无关的保障 JVM概述 JVM&#xff1a;Java Virtual Machine,也就是Java虚拟机。 虚拟机&#xff1a;通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的计算机系统&#xff08;物理上不存在&#xff09;。 JVM通…

聊聊ChatGPT:智能语言模型背后的原理

目录 1. ChatGPT的基础&#xff1a;GPT模型 2. 预训练与微调&#xff1a;让模型更加智能 2.1 预训练 2.2 微调 3. 多样化的应用场景 4. 未来的展望 5. 结语 在当今的人工智能领域&#xff0c;OpenAI的ChatGPT无疑是一个炙手可热的话题。它不仅能流畅地进行对话&#xff…

一键批量合并视频:掌握视频剪辑技巧解析,轻松创作完美影片

在数字时代的浪潮下&#xff0c;视频已成为人们记录和分享生活的重要工具。然而&#xff0c;对于许多非专业视频编辑者来说&#xff0c;将多个视频片段合并成一个完整的影片却是一项复杂且耗时的任务。幸运的是&#xff0c;云炫AI智剪一键批量合并视频功能的出现&#xff0c;让…

ICode国际青少年编程竞赛- Python-5级训练场-综合练习5

ICode国际青少年编程竞赛- Python-5级训练场-综合练习5 1、 a 16 for i in range(6):Dev.step(1)Dev.turnLeft()Dev.step(a)Dev.step(-a)Dev.turnRight()while Dev.energy < 100:wait()Dev.step(1)a a - 5 i2、 for i in range(5):Dev.step(11 - i * 2)Dev.turnRight()wh…

【算法】登山(线性DP,最长上升)

题目 五一到了&#xff0c;ACM队组织大家去登山观光&#xff0c;队员们发现山上一共有N个景点&#xff0c;并且决定按照顺序来浏览这些景点&#xff0c;即每次所浏览景点的编号都要大于前一个浏览景点的编号。 同时队员们还有另一个登山习惯&#xff0c;就是不连续浏览海拔相同…

人工智能中的概率魔法:解锁不确定性的智慧之钥

在人工智能&#xff08;AI&#xff09;的广阔天地中&#xff0c;概率论以其独特的魅力&#xff0c;成为了连接现实世界与智能决策的桥梁。从语音识别到图像识别&#xff0c;从自然语言处理到机器翻译&#xff0c;从智能推荐到自动驾驶&#xff0c;概率论知识在这些领域中发挥着…

高低温试验箱型号怎么选择?多禾试验带你一起探索

高低温试验箱在工业和科学研究当中扮演着至关重要的角色。无论是在电子、汽车、医疗器械还是航空航天领域&#xff0c;都需要对产品在不同温度条件下的性能进行测试。然而&#xff0c;在进行选择适合自己需求的高低温试验箱型号时&#xff0c;面对市场上琳琅满目的设备&#xf…

给定两点所能得到的数学关系

给定两点所能得到的数学关系 正文 正文 这里介绍一个基础问题&#xff0c;如果给定平面上的两个点的坐标&#xff0c;那么它们之间能够得到什么数学关系呢&#xff1f; ω arctan ⁡ y 1 − y 0 x 1 − x 0 x 1 − x 0 d cos ⁡ ω y 1 − y 0 d cos ⁡ ω d ( x 1 − x…

js中变量提升的那点事

变量提升是一个将变量声明或者函数声明提升到作用域起始处的过程&#xff0c;即变量声明 var 和函数声明 function fun() {…} 在会发生变量提升过程。 先来说变量声明var,看代码 console.log(test) // undefined var test"testStr" console.log(test) // testStr看…

你想知道74系列有多少种芯片吗?全在这里了

74系列芯片功能大全 7400 TTL 2输入端四与非门7401 TTL 集电极开路2输入端四与非门7402 TTL 2输入端四或非门7403 TTL 集电极开路2输入端四与非门7404 TTL 六反相器7405 TTL 集电极开路六反相器7406 TTL 集电极开路六反相高压驱动器7407 TTL 集电极开路六正相高压驱动器7408 T…

GIT基础01 基础命令与分支

前言 我们知道git是开发中比较常见的版本控制工具 我们可以先提出一个场景: 老板让你去修改方案 第一次修改 打回 第二次修改 打回 第n次修改 老板让你使用第一次的版本 阁下如何应对??? 我对每个版本进行编号?? 是一种方案 但是这里也是有缺陷的 比如说在很多版本中找…

测试驱动来学习 Promise

基础功能 测试案例&#xff1a;以同步的方式调用。 /*** v1: 基础功能*/ const p1 new MyPromise((resolve, reject) > {resolve(success)reject(error) })p1.then((value) > {console.log(v1: , value) }) 实现功能&#xff1a;在 status 和 value 的位置暂存值&…

什么是MVC?什么是SpringMVC?什么是三层架构?

文章目录 应用分层什么是MVC?什么是 SpringMVC&#xff1f;三层架构三层架构和MVC的关系 应用分层 在讲解什么是MVC之前&#xff0c;先来理解一下什么是应用分层。 应用分层是一种软件开发设计思想&#xff0c;将应用程序划分成N个层次&#xff0c;每个层次都分别负责自己的…

StarryCoding 入门教育赛 3 题解C++

比赛链接&#xff1a;https://www.starrycoding.com/contest/8 A. 坐标变换 语法题&#xff0c;考察输入输出、循环结构、数学运算。 #include <bits/stdc.h> using namespace std; using ll long long;const ll p 998244353; const int N 2e5 9;void solve() {in…

鸿蒙应用开发之调用C++开发代码库1

由于鸿蒙应用主要基于ArkTS开发,主要使用的语言是ETS,也就是JS脚本方式来开发,这与C++语言开发是不同的语言,这样就不能直接相互调用,因为不同的语言使用不同的数据结构,不同的调用方式,不同的运行环境。要想在ETS语言里调用C++开发的代码,需要进行合适的转换,并且按指…

Java学习【类与对象—封装】

Java学习【类与对象—封装】 封装的概念封装的实现包的概念import 导包导包中*的介绍import static 导入包中的静态方法和字段 static关键字的使用static 修饰成员变量static修饰方法静态成员变量的初始化 代码块静态代码块非静态代码块/实例化代码块/构造代码块加载顺序 封装的…

什么是外呼系统?企业为什么使用ai电销外呼系统

说起ai电销外呼系统&#xff0c;或许有的人并不了解这是什么&#xff0c;但它却常常出现在我们的生活中&#xff0c;今天我们来看看什么是外呼系统&#xff0c;企业为什么使用ai电销外呼系统&#xff1f; 一、什么是外呼系统 外呼系统就是由系统自动拨打电话的&#xff0c;外呼…

单例模式(饿汉+懒汉)

单例模式 文章目录 单例模式定义饿汉式单例**饿汉式单例需要加volatile关键字吗**类加载过程 懒汉式单列 定义 单例模式(Singleton),保证一个类仅有一个实例&#xff0c;并提供一个访问它的全局访问点 饿汉式单例 饿汉式单例是Java中实现单例模式的一种方式&#xff0c;它在类…

HTML常见标签-标题标签

标题标签 标题标签一般用于在页面上定义一些标题性的内容,如新闻标题,文章标题等,有h1到h6六级标题 代码 <body><h1>一级标题</h1><h2>二级标题</h2><h3>三级标题</h3><h4>四级标题</h4><h5>五级标题</h5>…

视频提取gif的手机端操作方法?看看这个就会了

Gif图片是一种非常流行的格式&#xff0c;广泛应用于社交媒体、网络宣传单等。它们能够轻松的吸引大众的注意力&#xff0c;在使用聊天软件的时候我们常常会使用gif动图表情包来调节聊天氛围。Gif动图比普通的图片有趣&#xff0c;也比视频的体积要小。我们想要通过手机来把视频…