mysql 重复单号 统计

              任务: 增加重复件统计分析: 统计展示选择时间范围内重复1次、重复2次、重复3次、重复4次、重复5次及以上的数据量

        

17、统计出现的重复次数

        增加重复件统计分析: 统计展示选择时间范围内重复1次、重复2次、重复3次、重复4次、重复5次及以上的数据量。

1,建表

DROP TABLE IF EXISTS repeat_num;
CREATE TABLE repeat_num(id INT NOT NULL AUTO_INCREMENT,create_date DATE,content VARCHAR(500),nums VARCHAR(500),PRIMARY KEY(id)
);

2,插入数据

INSERT INTO repeat_num VALUES
(1, '2024-01-01', '投诉', '1'),
(2, '2024-01-02', '举报', '1,2'),
(3, '2024-01-03', '申告', '1,2,3'),
(4, '2024-01-04', '提醒', '1,2,3,4'),
(5, '2024-01-05', '告知', '1,2,3,4,5'),
(6, '2024-01-06', '预警', '1,2,3,4,5,6'),
(7, '2024-01-07', '投诉', '2,3'),
(8, '2024-01-08', '举报', '3'),
(9, '2024-01-09', '举报', '4,5,6'),
(10, '2024-01-10', '举报', '2,5,1,3'),
(11, '2024-01-11', '举报', '7,8,9'),
(12, '2024-01-12', '申诉', '1,2,3,4,5,6,8'),
(13, '2024-01-13', '申诉', '2,6'),
(14, '2024-01-14', '申诉', '1,3,4,5,6'),
(15, '2024-01-15', '申诉', '1,3,5,6,7,8,9'),
(16, '2024-01-16', '申诉', '5,7,8,9,10,11,13'),
(17, '2024-01-17', '申诉', '7,8,9,10'),
(18, '2024-01-18', '提醒', '7,8,9,10,14'),
(19, '2024-01-19', '告知', '5,7,8,9,10'),
(20, '2024-01-20', '告知', '4,5,6,7,8,9,11,12'),
(21, '2024-01-21', '预警', '3,5'),
(22, '2024-01-22', '预警', '8,9,11');

3,sql

1,先结算长度:
 -- 先计算原来的长度,然后用replace 替换到目标值,得到的长度,相减就是目标长度。 如果目标是多字符串的
SELECT LENGTH('1,2,3,4,5,6') - 
LENGTH(REPLACE('1,2,3,4,5,6', ',', '')) AS count_commas;

多字符间隔处理:

-- 多字符的,计算结果要除以自身长度
SELECT  (LENGTH('best wish for you! best wish for you!') - 
LENGTH( REPLACE ('best wish for you! best wish for you', 'for', '')))/ 
LENGTH('for')  AS repeat_num;-- 向下取整
SELECT  FLOOR((LENGTH('best wish for you! best wish for you!') - 
LENGTH( REPLACE ('best wish for you! best wish for you', 'for', '')))/ 
LENGTH('for'))  AS repeat_num;

2,计算重复次数:
 SELECT *, (LENGTH(nums) - LENGTH(REPLACE(nums, ',', ''))  + 1) 
AS  repeat_count FROM repeat_num ;

3,进行统计:
-- 统计:
SELECT repeat_count, SUM(repeat_count) repeat_sum
FROM (SELECT *, (LENGTH(nums) - LENGTH(REPLACE(nums, ',', ''))  + 1) AS  repeat_count FROM repeat_num  
) AS temp GROUP BY repeat_count;

4,统计以上的:
-- 统计 重复1次、重复2次、重复3次、重复4次、重复5次及以上 -- 以上的,又要聚合统计,得单独写
SELECT  repeat_count, SUM(repeat_count) repeat_sumFROM (SELECT *, (LENGTH(nums) - LENGTH(REPLACE(nums, ',', ''))  + 1) AS  repeat_count FROM repeat_num  ) AS temp WHERE repeat_count <= 5GROUP BY repeat_countUNION  SELECT  6 AS repeat_count, SUM(repeat_count) repeat_sumFROM (SELECT *, (LENGTH(nums) - LENGTH(REPLACE(nums, ',', ''))  + 1) AS  repeat_count FROM repeat_num  ) AS temp WHERE repeat_count > 5;

2,用函数的方式:

知识点:

        SUBSTRING(s,n,len)带有len参数的格式,从字符串s返回一个长度同 len字符相同的子字符串,起始于位置n,也可能对n使用一个负值。假若这样,则子字符串的位置起始于字符串结尾的n字符,即倒数第n个字符,而不是字符串的开头位置。

【例 1】使用SUBSTRING函数获取指定位置处的子字符串,输入语句如下:

 SELECT SUBSTRING('breakfast', 5) AS coll,SUBSTRING('breakfast', 5,3) AS co12,
SUBSTRING('lunch', -3) AS co13,
SUBSTRING('lunch', -5, 3)AS col4;

SUBSTRING('breakfast',5)返回从第5个位置开始到字符串结尾的子字符串,结果为“kfast”; SUBSTRING(breakfast',5,3)返回从第5个位置开始长度为3的子字符串,结果为“kfa”;

SUBSTRING("unch',-3)返回从结尾开始第3个位置到字符串结尾的子字符串,结果为“nch”; SUBSTRING('lunch',-5,3)返回从结尾开始第5个位置,即字符串开头起,长度为3的子字符串,结果为“lun”。

用SUBSTRING去处理,不断去遍历,判断值符合条件的,就记录下。

函数:
DELIMITER //CREATE FUNCTION count_by_symbols(str VARCHAR(255), symbol VARCHAR(10))RETURNS INTBEGINDECLARE cnt INT DEFAULT 0;DECLARE idx INT DEFAULT 1;DECLARE len INT;SET len = CHAR_LENGTH(str);WHILE idx <= len DOIF SUBSTRING(str, idx, 1) = symbol THENSET cnt = cnt + 1;END IF;SET idx = idx + 1;END WHILE;RETURN cnt;END //DELIMITER ; 

使用

 SELECT  count_by_symbols('a|lin|yan@sd|fd|ds|f', "|") AS count_symbol_num;

如果新建函数保存

报错

This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)

SET GLOBAL log_bin_trust_function_creators = 1;

调用:
SELECT *, (count_by_symbols(nums, ',')   + 1) AS  repeat_num FROM repeat_num ;

统计:
SELECT  repeat_count, SUM(repeat_count) repeat_sumFROM (SELECT *, (count_by_symbols(nums, ',')   + 1) AS  repeat_count FROM repeat_num  ) AS temp WHERE repeat_count <= 5GROUP BY repeat_countUNION  SELECT  6 AS repeat_count, SUM(repeat_count) repeat_sumFROM (SELECT *, (count_by_symbols(nums, ',')   + 1) AS  repeat_count FROM repeat_num  ) AS temp WHERE repeat_count > 5;

总结:

        推荐用第一种方式,第二种,得看环境是否支持自定义函数或者过程。这种还好,如果要根据repeat_num去聚合的话,这种要聚合的话,这个要进行统计,就很麻烦了,用sql的话,得变成行转列,然后再进行统计。java的话,得把内容进行分离后,再重新聚合。

        上一篇: 《mysql 日环比 统计》

        下一篇: 《mysql 索引》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/1712.shtml

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

相关文章

【机器学习】各大模型原理简介

目录 ⛳️推荐 前言 一、神经网络&#xff08;联结主义&#xff09;类的模型 二、符号主义类的模型 三、决策树类的模型 四、概率类的模型 五、近邻类的模型 六、集成学习类的模型 ⛳️推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风…

uniapp H5的弹窗滚动穿透解决

目录 方案一 事件修饰符 overscroll-behavior 修饰符 overscroll-behavior 属性 看个案例 兼容 方案二 overflow&#xff1a;hiden 有一层遮罩蒙层覆盖在body上时&#xff0c;当我们滚动遮罩层&#xff0c;它下面的内容也会跟着一起滚动&#xff0c;看起来好像是上面的…

冯唐成事心法笔记

文章目录 卷首语 管理是一生的日常&#xff0c;成事是一生的修行PART 1 知己 用好自己的天赋如何管理自我用好你的天赋成大事无捷径如何平衡工作和生活做一个真猛人做自己熟悉的行业掌控情绪如何对待妒忌和贪婪如何战胜自己&#xff0c;战胜逆境真正的高手都有破局思维有时候…

本地环境测试

1. 在 Anaconda Navigator 中&#xff0c;打开 Jupyter Notebook &#xff0c;在网页中&#xff0c;点击进入本地环境搭建中创 建的工作目录&#xff0c;点击右上角的 New- 》 Folder &#xff0c;将新出现的 Untitled Folder 选中&#xff0c;并使用左上角 的 Rename 按钮重…

白蚁自动化监测系统解放方案

一、系统介绍 白蚁自动化监测系统是基于物联网的各项白蚁监测点数据的采集形成智能控制系统。提供白蚁实时预警及解决方案&#xff0c;真正实现区域内白蚁种群消灭。白蚁入侵&#xff0c;系统第一时间自动报警&#xff0c;显示入侵位置&#xff0c;实现抓获白蚁于现场的关键环…

【Linux】认识文件(三):缓冲区

【Linux】认识文件&#xff08;三&#xff09;&#xff1a;缓冲区 一.啥是缓冲区&#xff1f;二.缓冲区现象三.缓冲区的刷新方法四.缓冲区在哪&#xff1f;五.为什么要有缓冲区 一.啥是缓冲区&#xff1f; 缓冲区&#xff0c;官方说法就是&#xff1a;指的是一块用于临时存储数…

LeetCode 409—— 最长回文串

阅读目录 1. 题目2. 解题思路3. 代码实现 1. 题目 2. 解题思路 要想组成回文串&#xff0c;那么只有最中间的字符可以是奇数个&#xff0c;其余字符都必须是偶数个。 所以&#xff0c;我们先遍历一遍字符串&#xff0c;统计出每个字符出现的次数。 然后如果某个字符出现了偶…

vi, vim,data,wc,系统常用命令-读书笔记(十)

vi 文本编辑器 基本上 vi 共分为三种模式&#xff0c;分别是“一般指令模式”、“编辑模式”与“命令行命令模式”。这三种模式的作用分别是&#xff1a; 一般指令模式&#xff08;command mode&#xff09;以 vi 打开一个文件就直接进入一般指令模式了&#xff08;这是默认的…

Compose 简单组件

文章目录 Compose 简单组件TextText属性使用AnnotatedStringSpanStyleParagraphStyle SelectionContainer 和 DisableSelectionClickableText TextFieldTextField属性使用OutlinedTextFieldBasicTextFieldKeyboardOptions 键盘属性KeyboardActions IME动作 ButtonButton属性使用…

玩转压力管理,轻松高效编程

程序员缓解工作压力的小窍门 在当今快速发展的科技时代&#xff0c;程序员作为数字世界的建筑师&#xff0c;面临着高强度、高压力的工作环境。为保持工作效率和创新能力&#xff0c;同时也确保身心健康和个人热情的持久续航&#xff0c;采取科学合理的减压策略至关重要。 方…

一二三应用开发平台使用手册——系统管理-用户组-使用说明

概述 在RBAC模型中&#xff0c;资源、角色、用户三个关键元素&#xff0c;构成权限体系。在平台设计和实现的时候&#xff0c;以下几个核心问题思考如下&#xff1a; 角色&#xff0c;单层平铺还是树形结构&#xff1f; 在小型应用中&#xff0c;角色数量有限的情况下&#x…

高级数据结构—树状数组

引入问题&#xff1a; 给出一个长度为n的数组&#xff0c;完成以下两种操作&#xff1a; 1. 将第i个数加上k 2. 输出区间[i,j]内每个数的和 朴素算法&#xff1a; 单点修改&#xff1a;O( 1 ) 区间查询&#xff1a;O( n ) 使用树状数组&#xff1a; 单点修改&#xff1a…

17-软件脉冲宽度调制(SW_PWM)

ESP32-S3的软件脉冲宽度调制&#xff08;SW_PWM&#xff09; 引言 ESP32-S3 LED 控制器LEDC 主要用于控制 LED&#xff0c;也可产生PWM信号用于其他设备的控制。该控制器有 8 路通道&#xff0c;可以产生独立的波形&#xff0c;驱动 RGB LED 等设备。LED PWM 控制器可在无需C…

CLion远程调试

一 CLion远程调试 ## 1.1 建立远程连接过程 设置——部署——“”——SFTP——新建服务器名称——输入主机、用户名、密码信息——确定 工具链建立远程主机 设置——工具链——“”——远程主机——凭据新增服务器信息 上传本地代码到服务器 ps:要保证本地文件完整&#…

测试人员一定要避免的这些不专业行为!

软件测试并非一个简单的任务&#xff0c;需要高度的专业性和责任感&#xff0c;本文将探讨一些常见的不专业行为&#xff0c;及其对软件开发过程和产品质量可能产生的负面影响。 1. 忽略细节 在测试过程中忽视细节&#xff0c;导致测试不彻底&#xff0c;漏洞未被发现。 2. …

从 Android 恢复已删除文件的 3 种简单方法

如何从 Android 恢复已删除的文件&#xff1f;毫不犹豫&#xff0c;有些人可能会认为从 Google 备份恢复 Android 文件太容易了。但是&#xff0c;如果删除的文件未同步到您的帐户或未备份怎么办&#xff1f;您错误的恢复可能会永久删除您想要的数据。因此&#xff0c;我们发布…

常见的软件架构模式

在软件开发过程中&#xff0c;软件架构模式是实现高质量、可扩展系统的关键。本文将介绍一些常见的软件架构模式&#xff0c;分析其优缺点和适用场景&#xff0c;从而帮助大家在实际项目中做出更明智的架构选择&#xff08;注意以下的架构模式相互之间并不一定互斥&#xff0c;…

23种设计模式之抽象工厂

简单工厂和工厂方法 关注 产品等级 抽象工厂 关注 产品族 对于比较稳定的产品&#xff0c;抽象工厂更有效率&#xff08;一个工厂生产很多产品族&#xff09; 抽象工厂代码例子加深理解

我与C++的爱恋:类和对象(三)

​ ​ &#x1f525;个人主页&#xff1a;guoguoqiang. &#x1f525;专栏&#xff1a;我与C的爱恋 先来回顾一下&#xff0c;上一节的内容并且通过上次的内容来做一道oj题。 https://leetcode.cn/problems/implement-queue-using-stacks/ class MyQueue { private:stack&l…