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_sum
	FROM (
	 SELECT *, (LENGTH(nums) - LENGTH(REPLACE(nums, ',', ''))  + 1) AS  repeat_count 
	 FROM repeat_num  
	) AS temp WHERE repeat_count <= 5
	GROUP BY repeat_count
  UNION  
 SELECT  6 AS repeat_count, SUM(repeat_count) repeat_sum
	FROM (
	 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 INT
  BEGIN
    DECLARE cnt INT DEFAULT 0;
    DECLARE idx INT DEFAULT 1;
    DECLARE len INT;


    SET len = CHAR_LENGTH(str);


    WHILE idx <= len DO
      IF SUBSTRING(str, idx, 1) = symbol THEN
        SET 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_sum
	FROM (
	 SELECT *, (count_by_symbols(nums, ',')   + 1) AS  repeat_count 
	 FROM repeat_num  
	) AS temp WHERE repeat_count <= 5
	GROUP BY repeat_count
  UNION  
 SELECT  6 AS repeat_count, SUM(repeat_count) repeat_sum
	FROM (
	 SELECT *, (count_by_symbols(nums, ',')   + 1) AS  repeat_count 
	 FROM repeat_num  
	) AS temp WHERE repeat_count > 5;

总结:

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

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

        下一篇: 《mysql 索引》

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Scala 04 —— 函数式编程底层逻辑

函数式编程 底层逻辑 该文章来自2023/1/14的清华大学交叉信息学院助理教授——袁洋演讲。 文章目录 函数式编程 底层逻辑函数式编程假如...副作用是必须的&#xff1f;函数的定义函数是数据的函数&#xff0c;不是数字的函数如何把业务逻辑做成纯函数式&#xff1f;函数式编程…

【Linux系统】地址空间 Linux内核进程调度队列

1.进程的地址空间 1.1 直接写代码&#xff0c;看现象 1 #include<stdio.h>2 #include<unistd.h>3 4 int g_val 100;5 6 int main()7 {8 int cnt 0;9 pid_t id fork();10 if(id 0)11 {12 while(1)13 {14 printf(&…

牛客Linux高并发服务器开发学习第三天

静态库的使用(libxxx.a) 将lession04的文件复制到lession05中 lib里面一般放库文件 src里面放源文件。 将.c文件转换成可执行程序 gcc main.c -o app main.c当前目录下没有head.h gcc main.c -o app -I ./include 利用-I 和head所在的文件夹&#xff0c;找到head。 main.c…

进程控制相关

进程终止 进程终止时&#xff0c;操作系统要释放对应进程申请的相关内核数据结构和对应的代码和数据。其不本质就是释放进程申请的系统资源。 进程终止的常见方式&#xff1a; 1、代码运行完毕且结果正确。 2、代码运行完毕但结果不正确。 3、代码没运行完&#xff0c;进程…

【Entity Framework】闲话EF中批量配置

【Entity Framework】闲话EF中批量配置 文章目录 【Entity Framework】闲话EF中批量配置一、概述二、OnModelCreating中的批量配置元数据API的缺点 三、预先约定配置忽略类型默认类型映射预先约定配置的限制约定添加新约定替换现有约定约定实现注意事项 四、何时使用每种方法进…

通过实例学C#之ArrayList

介绍 ArrayList对象可以容纳若干个具有相同类型的对象&#xff0c;那有人说&#xff0c;这和数组有什么区别呢。其区别大概可以分为以下几点&#xff1a; 1.数组效率较高&#xff0c;但其容量固定&#xff0c;而且没办法动态改变。 2.ArrayList容量可以动态增长&#xff0c;但…

使用go和消息队列优化投票功能

文章目录 1、优化方案与主要实现代码1.1、原系统的技术架构1.2、新系统的技术架构1.3、查看和投票接口实现1.4、数据入库MySQL协程实现1.5、路由配置1.6、启动程序入口实现 2、压测结果2.1、设置Jmeter线程组2.2、Jmeter聚合报告结果&#xff0c;支持11240/秒吞吐量2.3、Jmeter…

vue 一键更换主题颜色

这里提供简单的实现步骤&#xff0c;具体看自己怎么加到项目中 我展示的是vue2 vue3同理 在 App.vue 添加 入口处直接修改 #app { // 定义的全局修改颜色变量--themeColor:#008cff; } // 组件某些背景颜色需要跟着一起改变&#xff0c;其他也是同理 /deep/ .ant-btn-primar…

『FPGA通信接口』汇总目录

Welcome 大家好&#xff0c;欢迎来到瑾芳玉洁的博客&#xff01; &#x1f611;励志开源分享诗和代码&#xff0c;三餐却无汤&#xff0c;顿顿都被噎。 &#x1f62d;有幸结识那个值得被认真、被珍惜、被捧在手掌心的女孩&#xff0c;不出意外被敷衍、被唾弃、被埋在了垃圾堆。…

【Linux学习】Linux编辑器-vim使用

这里写目录标题 1. &#x1f320;vim的基本概念&#x1f320;2. vim的基本操作&#x1f320;3.vim异常处理&#x1f320;4. vim正常模式的相关命令&#x1f320;5. vim末&#xff08;底&#xff09;行模式相关命令 vi/vim都是多模式编辑器&#xff0c;不同的是vim是vi的升级版本…

开发与产品的战争之自动播放视频

开发与产品的战争之自动播放视频 起因 产品提了个需求&#xff0c;对于网站上的宣传视频&#xff0c;进入页面就自动播放。但是基于我对chromium内核的一些浅薄了解&#xff0c;我当时就给拒绝了: “浏览器不允许”。&#xff08;后续我们浏览器默认都是chromium内核的&#…

2024年华中杯数模竞赛A题完整解析(附代码)

2024年华中杯数模竞赛A题 基于动态优化的太阳能路灯光伏板朝向以最大化能量收集研究摘要问题重述问题分析模型假设符号说明 代码问题一 完整资料获取 基于动态优化的太阳能路灯光伏板朝向以最大化能量收集研究 摘要 随着可再生能源技术的发展&#xff0c;太阳能作为一种清洁的…

C++类与对象(中)②

目录 1.赋值运算符重载 1.1运算符重载 1.2赋值运算符重载 1.2.1赋值运算符重载格式 1.2.2赋值运算符只能重载成成员函数不能重载成全局函数 1.2.3同拷贝函数一样&#xff0c;如果类是形如日期类这样变量全是内置类型的&#xff0c;赋值运算符就必须自己实现&#xff0c;…

Spectre-v1 简介以及对应解决措施

文章目录 前言一、Variant 1: Exploiting Conditional Branches.二、 BACKGROUND2.1 Out-of-order Execution2.2 Speculative Execution2.3 Branch Prediction2.4 The Memory Hierarchy2.5 Microarchitectural Side-Channel Attacks2.6 Return-Oriented Programming 三、 ATTAC…

大学生简历大赛演讲稿(6篇)

大学生简历大赛演讲稿&#xff08;6篇&#xff09; 以下是六篇大学生简历大赛演讲稿的范文&#xff0c;供您参考&#xff1a; 范文一&#xff1a;展现真我&#xff0c;点亮未来 尊敬的评委、亲爱的同学们&#xff1a; 大家好&#xff01; 今天&#xff0c;我站在这里&#xf…

区块链实验室(35) - 编译solana for ARM64版

今天终于成功编译solana for arm64版&#xff0c;编译时间巨长。见下图所示。编译步骤详见solana网站https://github.com/solana-labs/solana和https://docs.solanalabs.com/。

【C语言】【数据结构】项目实践——贪吃蛇游戏(超详细)

前言 本篇博客我们来实现一个小游戏项目——贪吃蛇&#xff0c;相信肯定很多人都玩过&#xff0c;那么整个贪吃蛇是怎么实现出来的那&#xff0c;这个项目用到了很多方面的知识&#xff1a;C语言函数、枚举、结构体、动态内存管理、预处理指令、链表、Win32 API等。我们就通过这…

nodejs工具模块学习

util 是一个Node.js 核心模块&#xff0c;提供常用函数的集合&#xff1b; util.inspect(object,[showHidden],[depth],[colors]) 是一个将任意对象转换 为字符串的方法&#xff0c;通常用于调试和错误输出&#xff1b; 如果只有一个参数 object&#xff0c;是要转换的对象&…

网工内推 | 兴业银行总行正编,科技运维部,硕士以上学历

01 兴业银行 招聘岗位&#xff1a;安全渗透专家 职责描述&#xff1a; 1.负责牵头组织本行红蓝对抗、攻防演练等工作&#xff1b; 2.负责牵头制定有效的渗透测试方案&#xff0c;开展对本行防御体系的验证工作&#xff1b; 3.负责牵头组织本行各类应用系统的渗透测试与漏洞扫…

java的Spring XML和注解解析深入理解

正文 熟悉IOC体系结构 要学习Spring源码&#xff0c;我们首先得要找准入口&#xff0c;那这个入口怎么找呢&#xff1f;我们不妨先思考一下&#xff0c;在Spring项目启动时&#xff0c;Spring做了哪些事情。这里我以最原始的xml配置方式来分析&#xff0c;那么在项目启动时&a…