mysql统计某列值连续出现次数小于五次的记录
来源:互联网 发布:旅游网站系统 思途cms 编辑:程序博客网 时间:2024/05/01 13:09
表原纪录如下:
需求:找出age连续出现次数少于5次的所有记录。
#建临时表
CREATE TABLE dba.t3_temp AS SELECT cc.age,rownum,cc.orinum,cc.id,cc.nameFROM (SELECT aa.id, aa.age, aa.name, aa.orinum, IF( (aa.age = @page), @row := @row + 1, @row := 1 )rownum, @page := aa.age pn FROM ( SELECT id,age,NAME,(@rowNum:=@rowNum+1) AS orinum FROM dba.t3 ib, (SELECT @row := 0, @page := '000000') row1, (SELECT (@rowNum :=0) ) bb )aa) cc
用途:将连续出现的age对应的rownum递增,遇到新值时,rownum赋值为1.
orinum模拟的是行号。
该临时表查询效果如下:
--建个新表
CREATE TABLE dba.t3_new LIKE dba.t3;
ALTER TABLE dba.`t3_new` ADD group_idVARCHAR(100);
--存储过程
实现原理:
查询临时表rownum为1的记录数v_cnt,分为v_cnt个组。第一个rownum为1的行和第二个rownum为1的行之间(前闭后开)的记录则为第一个组.依次类推。最后一个组数据特殊些,需要额外处理一下。将group_id及相应的数据插入到新表中。
DELIMITER //CREATE PROCEDURE p6()BEGIN DECLARE v_cnt INT DEFAULT 1; DECLARE v_N INT DEFAULT 1; DECLARE v_N2 INT; DECLARE v_cnt2 INT; SET v_N2 = v_N - 1; SELECT COUNT(*) INTO v_cnt FROM dba.`t3_temp` WHERE rownum = 1 ; SET v_cnt2 = v_cnt - 1; #插入前N个rownum为1的所有数据 WHILE v_N < v_cnt DO INSERT INTO dba.`t3_new`(group_id,age,NAME,id) SELECT v_N,age,NAME,id FROM dba.`t3_temp` WHERE orinum >=( SELECT orinum FROM dba.`t3_temp` WHERE rownum = 1 ORDER BY orinum LIMIT v_N2,1) AND orinum < ( SELECT orinum FROM dba.`t3_temp` WHERE rownum = 1 ORDER BY orinum LIMIT v_N,1 ); SET v_N = v_N + 1; SET v_N2 = v_N2 + 1; END WHILE; #插入最后一个rownum为1的数据 #select v_cnt; #select v_cnt2; INSERT INTO dba.`t3_new`(group_id,age,NAME,id) SELECT v_cnt,age,NAME,id FROM dba.`t3_temp` WHERE orinum >=( SELECT orinum FROM dba.`t3_temp` WHERE rownum = 1 ORDER BY orinum LIMIT v_cnt2,1) AND orinum <= ( SELECT orinum FROM dba.`t3_temp` ORDER BY orinum DESC LIMIT 1 ); END ;//
CALL p6();
--查询连续出现相同age小于5次的记录
SELECT age,COUNT(*)
FROM dba.`t3_new`
GROUP BY group_id,age
HAVING COUNT(*)<5;
效果如下:
--不当之处,欢迎指正。
0 0
- mysql统计某列值连续出现次数小于五次的记录
- 统计连续出现次数最多的单词
- 统计每个值连续出现的次数
- MySql中关于某列中相同数值连续出现次数的统计
- MySql中关于某列中相同数值连续出现次数的统计
- 字符串中连续子串出现次数统计,获取连续出现次数最多的子串
- 记录连续重复出现的单词以及出现的次数
- 循环(统计两个连续的字母出现的次数)
- 统计一个二进制字符串连续出现0或者连续出现1的最大次数
- c++统计连续单词出现次数
- mysql单表统计认证时间间隔小于15天的人数和次数
- 最大连续出现的次数
- 长度小于3的连续子串在原串中出现的次数,结果按照数量和字典排序
- mysql统计字段中某一字符串出现的次数
- mysql根据不同状态统计出现的次数
- mysql统计字段中某一字符串出现的次数
- String类练习讲解-统计字符串中出现连续字符的次数
- C++入门基础篇学习手记: 统计在输入中每个值连续出现的次数
- 非线性转换
- android genymotion启动失败 unable to start the Genymotion virtual device
- change MySQL's config file and let it use utf-8 by default
- Hadoop配置集群内无密码登陆
- Linux Shell(一)——Shell变量
- mysql统计某列值连续出现次数小于五次的记录
- struts2的2个核心配置文件
- js 填充数据到表单
- 48 php错误报告设置
- sdut oj3373 数据结构实验之查找一:二叉排序树
- 一个简单的Stack实现
- 根据session获取channel
- 可拖拽内容
- 点击【按钮】,现实"Hello world !"