mysql 去重 补全 取出重复 变量 函数 和存储过程

embedded/2024/11/24 1:45:39/

连接更新 UPDATE JOIN SET

UPDATE Sheet4 us
JOIN () temp ON us.id = temp.idSET us.`name` = temp.`name`;

补全查询 COALESCE LAG OVER

SELECTid,COALESCE (NAME,LAG( NAME ) OVER ( ORDER BY id ))
FROMusers源数据:
张三	123
李四	4567
补全后的:,仅仅是在 第一个数据下面进行了补全
1	张三
2	张三
3	
4	李四
5	李四
6	
7	
coalesce
v.
<正式>合并,联合;使(元素)结合coalescence
n.
合并;联合;接合
lag
v.
掉队,落后于;给(管道等)加防冻保暖层;<非正式>使入狱,逮捕
n.
(两件事的)时间间隔;<英,非正式>囚犯,惯犯;相位滞后;绝热层,保温套;桶板
adj.
最后的
更新和补全合并
						UPDATE Sheet4 usJOIN (SELECTus2.id,COALESCE (us2.NAME,LAG( us2.NAME ) OVER ( ORDER BY us2.id )) AS NAME FROMSheet4 us2 ) temp ON us.id = temp.id SET us.`name` = temp.`name`;

使用变量从数据从1开始赋值 SET

SET @counter = 0;
UPDATE Sheet2 
SET id = ( @counter := @counter + 1 );
SET i = 0;
UPDATE Sheet2 
SET id = ( i := i + 1 );

ROW_NUMBER 根据 一个字段 取1-到结尾

    SELECT ROW_NUMBER() OVER (ORDER BY id) AS rowNumber,id, nameFROM users
  • 如果根据age,那age 最小的就 row Number就是1

循环 while

SET @i = 1;  -- 初始化计数器WHILE @i <= 50 DO-- 增加计数器SET @i = @i + 1;
END WHILE;

存储过程 loop

DELIMITER $$CREATE PROCEDURE loop_test()
BEGIN-- 定义变量,默认为1DECLARE i INT DEFAULT 1;-- 循环 50 次loop_start:IF i <= 50 THEN-- 在此处插入你希望执行的 SQL 语句,例如插入数据-- INSERT INTO your_table (column_name) VALUES (i);-- 增加循环计数器SET i = i + 1;-- 这里chat写的有bug,应该 i>50 的时候,才跳出-- 跳回循环开始LEAVE loop_start;END IF;END LOOP;
END $$DELIMITER ;CALL loop_test();

WITH 临时表的使用

  • 和 只运行 里面的COALESCE SQL 是一样的,不清楚
WITH FillNames AS (SELECTid,-- 使用 LAST_VALUE 来填充 NULL 值, PARTITION BY 是为了根据 id 排序并填充COALESCE(name, LAG(name) OVER (ORDER BY id )) AS filled_name,ageFROM users
)
-- 返回填充后的结果
SELECTid,filled_name AS name,age
FROM FillNames;

删除一周内的数据

DELETE FROM t_second
WHERE 
create_time < NOW() - INTERVAL 1 WEEK;
-- 创建时间 < 当前时间 - 1周

删除重复

id	name age
6	王五	6
7	王五	6
查询到重复的数据(随机或指定)
  • 注意 不管怎么查,只能查出一条
SELECT id FROM users GROUP BY `name`, age HAVING COUNT(*) > 1 
  • 指查询 最大的ID
SELECT max(id) id FROM users GROUP BY `name`, age HAVING COUNT(*) > 1
1. 使用delete from join删除
DELETE t1
FROMusers t1JOIN ( ) t2 ON t1.id = t2.id
2. 使用临时表删除重复
-- 创建一个临时表存储重复的用户id
CREATE TEMPORARY TABLE temp_ids AS
SELECT u2.id
FROM users u2
GROUP BY u2.name, u2.age
HAVING COUNT(*) > 1;-- 删除用户表中id在临时表中的记录
DELETE FROM users
WHERE id IN (SELECT id FROM temp_ids);-- 删除临时表
DROP TEMPORARY TABLE temp_ids;
where条件不能 是同一个表

MySQL 不允许在 DELETE 语句中直接在 FROM 子查询中引用同一张表。

DELETE FROM users u1 WHERE u1.id in (SELECT u2.idFROM users u2GROUP BY u2.`name`, u2.ageHAVING COUNT(*) > 1 
)
1093 - You can't specify target table 'u1' for update in FROM clause

NOT EXISTS 使用

框架
  • not exists 框架,where后直接跟上
SELECT NAME
FROMusers s1 
WHERENOT EXISTS (  )
条件
  • 注意:s1 是外层的 表
	SELECT1 FROMusers s2 WHEREs1.`name`  LIKE CONCAT( '%', s2.`name`, '%' )

使用 left join 和 not like 取出不同

SELECTs1.`name`,s1.合计,s2.合计 
FROMSheet9 s1LEFT JOIN september s2 ON s1.`name` = s2.`name` 
WHEREs1.合计 NOT LIKE CONCAT('%',s2.合计,'%' )

trim去空格用法

	SELECT TRIM(' ' FROM '  Hello World  ') AS cleaned;

http://www.ppmy.cn/embedded/139996.html

相关文章

ONVIF协议操作摄像头方法

一.前言 简单介绍一下涉及到的名称。SOAP是一种基于XML的RPC协议规范&#xff0c;gSOAP是一个开发SOAP和XML应用&#xff08;它们组成了webservice&#xff09;的工具。ONVIF协议就是在SOAP协议规范的基础之上定义的一套用于网络摄像机的标准协议。 二.gsoap工具 gsoa…

Java与Kotlin在鸿蒙中的地位

在当今移动操作系统领域&#xff0c;华为推出的鸿蒙系统&#xff08;HarmonyOS&#xff09;正逐渐崭露头角&#xff0c;成为与Android、iOS并驾齐驱的操作系统之一。对于开发者而言&#xff0c;了解如何为鸿蒙系统开发高质量的应用程序变得至关重要。在这篇文章中&#xff0c;我…

Kafka-Controller角色需要做什么?

一、上下文 《Kafka-Controller选举》博客中分析了Controller是如何选举出来的&#xff0c;且比如会执行onControllerFailover()。接下来让我们看看Controller角色都承担了哪些职责。 二、注册监听器 在从zookeeper读取资源前&#xff0c;注册监听器以获取 broker/topic 的回…

雷达图像用dB使图像细节更好

数字例子&#xff1a;雷达图像转换为dB尺度的影响 假设我们有一个雷达图像&#xff0c;其Sigma0值的线性表示如下&#xff1a; 像素A的Sigma0值为0.2&#xff08;较暗&#xff09;像素B的Sigma0值为1.0&#xff08;中等亮度&#xff09;像素C的Sigma0值为5.0&#xff08;较亮…

Nginx通过url获取代理地址,动态代理

目的 底层服务返回的ws地址代理成wss的, 但是我们不知道底层服务返回的地址ip port所以 通过拼接的方式来通过url信息中获取到ws地址信息,进行动态代理 nginx.conf server {listen 11081 ssl;server_name localhost11081;rewrite ^/old-url$ /new-url permanent;add_…

如何在WPF中嵌入其它程序

在WPF中嵌入其它程序&#xff0c;这里提供两种方案 一、使用WindowsFormHost 使用步骤如下 1、添加WindowsFormsIntegration和System.Windows.Forms引用 2、在界面上放置WindowsFormHost和System.Windows.Forms.Panel 1 <Grid> 2 <WindowsFormsHost> 3…

Oracle - 多区间按权重取值逻辑 ,分时区-多层级-取配置方案(三)

本篇紧跟第一篇&#xff0c; 和 第二篇无关 Oracle - 多区间按权重取值逻辑 &#xff0c;分时区-多层级-取配置方案 Oracle - 多区间按权重取值逻辑 &#xff0c;分时区-多层级-取配置方案(二) 先说需求&#xff1a; 某业务配置表&#xff0c;按配置的时间区间及组织层级取方…

Ubuntu上安装MySQL并且实现远程登录

目录 下载网络工具 查看网络连接 更新系统软件包&#xff1b; 安装mysql数据库 查看mysql数据库状态 以数字ip形式显示mysql的监听状态。&#xff08;默认监听端口是3306&#xff09; 查看安装mysql数据库时系统创建的目录信息。 根据查询到的系统用户名以及随机密码&a…