mysql 重复单号 统计

news2025/1/16 16:14:13

              任务: 增加重复件统计分析: 统计展示选择时间范围内重复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 索引》

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

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

相关文章

关于图像YUV格式分类和排布方式的全学习

【学习笔记】关于图像YUV格式分类和排布方式的全学习_yuv图像-CSDN博客 下图是将多个yuv420p图像(A和B)&#xff0c;拼接成一个画面的思路 A大小:416*64 B大小:416*208 将A和B合并到一个416*416的尺寸上&#xff0c;代码如下 //整合char * ptd;ptd (char * ) malloc (416*41…

Codeforces Round 939 (Div. 2)(A,B,C,D,E1,E2)

题目链接 这场不太难&#xff0c;打起来跟 d i v 3 div\ 3 div 3 一样&#xff0c;会者不难。AB找规律&#xff0c;CD构造&#xff0c;E是暴力&#xff0c;带点数学推理。 A. Nene’s Game 题意&#xff1a; 尼尼发明了一种基于整数递增序列 a 1 , a 2 , … , a k a_1, a_…

电大搜题微信公众号:重庆开放大学学子的学习利器

在当今信息化时代&#xff0c;学习已经成为每个人不可或缺的一部分。然而&#xff0c;对于重庆开放大学的学子们来说&#xff0c;由于远程教育的特殊性&#xff0c;他们面临着更大的学习挑战。幸运的是&#xff0c;他们现在可以依靠一款强大的学习利器——电大搜题微信公众号&a…

windows 11 打包python镜像相关操作

第一步&#xff1a;Docker下载 首先先到Docker官网下载最新官方Docker for Windows链接&#xff0c;点击下载之后进行安装&#xff0c;安装好之后在cmd执行 wsl --update。 第二步&#xff1a;在电脑上打开“控制面板”->“程序”-> “启动或关闭Windows功能”。 有的…

简单工厂模式设计实验

实验内容&#xff1a; 楚锋软件公司欲基于Java 语言开发一套图表库&#xff0c;该图表库可以为应用系统提供各种不同外观的图表&#xff0c;例如柱状图、饼状图、折线图等。楚锋软件公司图表库设计人员希望为应用系统开发人员提供一套灵活易用的图表库&#xff0c;而且可以较为…

CalcPad(2) 单位设置和绘制图表

CalcPad(2) 单位设置和绘制图表 Hi uu们&#xff0c;CalcPad用的还好吗&#xff1f;有发现一些问题吗&#xff1f; 在我的使用中&#xff0c;经常需要指定一些计算结果的符号&#xff0c;比如说我希望ADC最小分辨率的计算结果是以uV展示&#xff0c;那我们该怎么操作呢&#…

Aurora 协议学习理解与应用——Aurora 8B10B协议学习

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 Aurora 8B10B协议学习之一&#xff0c;理解协议 概述8B10B数据发送和接收Symbol-Pairs传输调度用户PDU传输过程用户PDU接收过程 流控自然流量控制操作自然流量控制延迟自然流…

【复习笔记】reeRTOS(七) 二值信号量和计数信号量

本文是FreeRTOS复习笔记的第七节&#xff0c;信号量。 上一篇文章&#xff1a; 【复习笔记】FreeRTOS(六) 队列操作 文章目录 一、信号量分类二、二值信号量2.1.实验设计2.2.测试例程2.3.实验效果 三、计数信号量3.1.实验设计3.2.测试例程3.3.实验效果 一、信号量分类 信号量是…

每日算法练习(1)

开一个新坑&#xff0c;记录下自己每天的算法练习&#xff0c;希望自己通过1个多月的学习&#xff0c;能够成为算法大神。 下面正式开始新坑。 两个数组的交集 这是牛客上的题&#xff0c;根据题意&#xff0c;我们有多种解法&#xff0c;这题用哈希比较好写。我们可以弄一个…

(保姆级教学)跨站请求伪造漏洞

1. CSRF漏洞 CSRF&#xff08;Cross-site request forgery&#xff09;跨站请求伪造&#xff0c;也被称为One Click Attack 或者Session Riding&#xff0c;通常缩写为CSRF或者XSRF&#xff0c;是一种对网站的恶意利用。尽管听起来像跨站脚本&#xff08;XSS&#xff09;&…

Linux内核启动过程图解(全程高能)

文章目录 1、进入第一条指令 _text2、start_kernel3、总结(内核启动流程描述) 1、进入第一条指令 _text 编译内核后&#xff0c;打开System.map文件&#xff0c;找到对应的_text和start_kernel ffffff8008080000 T _text //第一条指令 ffffff80096007f4 T start_kernel //…

代码随想录算法训练营第四十四天| 完全背包、518. 零钱兑换 II、377. 组合总和 Ⅳ

一、完全背包 题目链接/文章讲解/视频讲解&#xff1a;https://programmercarl.com/%E8%83%8C%E5%8C%85%E9%97%AE%E9%A2%98%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80%E5%AE%8C%E5%85%A8%E8%83%8C%E5%8C%85.html 状态&#xff1a;已解决 1.问题介绍 完全背包的模板题目&#xff1a;…

dp思维 枚举

题目链接 #include<bits/stdc.h> using namespace std; #define i64 long long const i64 mod 1e9 7; int main() {int n;cin >> n;vector<char>s(n 1);for (int i 1; i < n; i) {cin >> s[i];}//用ans记录所有满足条件的答案数量&#xff0c;c…

linux下使用qt+mpv调用GPU硬件解码

linux下GPU硬件解码接口&#xff0c;常用的有vdpau和vaapi。 mpv是基于mplayer开发的一个播放器。此外&#xff0c;mpv还提供了函数库libmpv&#xff0c;通过使用libmpv可以编写一个简单的播放器。 基于qtlibmpv的demo&#xff0c;官方例子代码如下&#xff1a;https://github.…

STM32之串口中断接收丢失数据

五六年没搞STM32了,这个项目一切都挺顺利,万万没想到被串口接收中断恶心到了。遇到的问题很奇怪 HAL_UART_Receive_IT(&huart1, &rx_buffer[rx_index], LCD_UART_LEN); 这个代码中 LCD_UART_LEN=1的时候,接收过来的数据,数据包的第一个字节总是会跑到rx_buffer的末…

UE5集成gRPC

最近有项目需要在UE5里做RPC&#xff0c;对比了thrift、gRPC、rcplib等开源rpc框架&#xff0c;由于习惯使用protobuf&#xff0c;故选择了gRPC。然而&#xff0c;Google出品也是一言难尽啊&#xff0c;最起码编译太繁琐了。 本次使用的gRPC版本为1.62.1&#xff0c;UE5.2&…

面试stm32基础知识

1.ISP 第一步进入bootloader模式&#xff1a;先置BOOT0为高&#xff0c;BOOT1为低&#xff0c;再复位单片机进入bootloader模式&#xff0c;之后通过上位机下载程序&#xff1b; 第二步配置启动代码的地方&#xff1a;代码下载完毕后&#xff0c;置BOOT0为低&#xff0c;BOOT1…

【NTN 卫星通信】NTN的信关站应该建在哪些地方

1 概述 3GPP的卫星通信讨论了透传星和再生星两种方式。透传星方式&#xff0c;卫星主要是做为中继存在&#xff0c;基本上不做通信协议的处理。再生星方式&#xff0c;gNodeB的主要功能在卫星上&#xff0c;完成通信协议的主要内容。无论是透传星还是再生星&#xff0c;都需要通…

[C++]异常

基本使用 try {int a, b; std::cin >> a >> b;if(b 0) {throw std::runtime_error("unexpected zero");} else {cout << a / b << endl;}} catch(std::exception &e) { cout << "runtime_error: " << e.what() &…

战姬物语部署

一.准备环境 #关闭seliunx和防火墙 setenforce 0 systemctl stop firewalld systemctl disable firewalld #配置源&#xff0c;并安装常用工 curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo curl -o /etc/yum.repos.d/epel.repo …