1. 程式人生 > >mysql統計某列值連續出現次數小於五次的記錄

mysql統計某列值連續出現次數小於五次的記錄

表原紀錄如下:

需求:找出age連續出現次數少於5次的所有記錄。

#建臨時表

CREATE TABLE dba.t3_temp AS
 SELECT
 cc.age,rownum,cc.orinum,cc.id,cc.name
FROM
 (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:
[email protected]
+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;

效果如下:


--不當之處,歡迎指正。

相關推薦

mysql統計連續出現次數小於記錄

表原紀錄如下: 需求:找出age連續出現次數少於5次的所有記錄。 #建臨時表 CREATE TABLE dba.t3_temp AS SELECT cc.age,rownum,cc.orinum,cc.id,cc.name FROM (SELECT aa.id

查詢資料庫某個欄位相同出現次數大於兩的列表

程式碼: select * from uav a where exists( select sn_number from uav where a.sn_number = sn_number group by sn

php統計一個一維陣列中,相同的連續出現的最大次數

一維陣列: $array = [2,3,3,3,3,4,2,4,4,5,5,3,3,7,7,6,6,6,8,8,4,4,4,4,4,8,8,8,8,98,6,98,98]; 效果: Array ( [2] => 1 [3] => 4 [4] => 5 [5] =>

javascript計算陣列中出現次數

需求 返回一個數組某值出現的次數 輸入:一個數組 輸出:需要計數的元素 程式碼 /* 傳入一個數組 返回一個數組某值出現的次數 */ const countOccurences

shell命令統計去重後的

需求:根據MAC獲取,MAC對應的硬體版本和軟體版本。在根據硬體版本統計MAC的數量$ head test_1.txt00:07:67,EC2108,HWV010537P000000:07:63,Z83,ZNV861010P122500:07:67,EC6108V9U_ca_

求一個字符串中連續出現次數最多的子串

article 規律 生成 clu 一次 strong tor first sub 題目:求一個字符串中連續出現的次數最多的子串。 例如,字符串“abababc”,最多連續出現的為ab,連續出現三次。 思路: 例如字符串“abababc”,最多連續出現的為ab,連續出現

計數數組中出現次數

docs arr 每次 clas class color con data- 遞增 每次遇到數組中的特定值時,使用reduce()來遞增計數器。 1 const countOccurrences = (arr, value) => arr.reduce((a, v)

返回(統計)一個列表中出現次數最多的元素

clas 列表 元素 center enter ax1 叠代器 orm {} 首先定義一個函數 函數內逐行依次解釋為: #定義一個函數def max1(lt):   dict1 = {} #建立一個空字典 s = set(lt)

python統計列表中某個元素出現次數

users = ['bobby1', 'bobby2', 'bobby3', 'bobby1', 'bobby2', 'bobby2' ]統計各個元素出現次數 1.傳統方法 user_dict = {} for user in users: if user not in user_d

Mysql查詢最長字串記錄

                         

獲取GridView中的

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

mysql統計段日期中段時間的資料

中間的動態拼接是為了防止隔天查詢(如17:30-8:30),當然就收資料後要進行處理讓後在傳入 SELECT count(DISTINCT barcode) AS count,DATE_FORMAT(date, '%Y-%m-%d') AS ti FROM ag_cpparts WHERE DATE_

mysql設定資料自增1 及設定後insert寫法

+--------+--------------+------+-----+---------+----------------+ | Field  | Type         | Null | Key | Default | Extra          | +-----

統計檔案內每個字元出現次數

package com.zyq.test; import java.io.*; import java.util.Set; import java.util.TreeMap; public class TsetCountCharacters {     public st

python將檔案內容按照重新排序

python實現將檔案內容按照某一列內容的大小值重新排序。 例如團檔案內容為: 現在講檔案內容按照第四列的值重新排序,形成: print(''.join(sorted(open('test.t

linux統計txt檔案中單詞出現次數並排序

檔案:a.txt 任務:統計該檔案中每一個單詞出現的次數,並按照出現頻率從大到小排序 sed 's/ /\n/g' "a.txt" | sort | uniq -c | sort -nr 解析: sed替換 sed 's/被替換的字串/新字串/[替換選項]' fil

Java統計一篇文章中出現次數最多的漢字或英文單詞 又出現次數統計

思想是用到了Map集合的鍵唯一性儲存漢字或者單詞,單詞的獲取通過正則獲取: 統計類: import java.util.ArrayList; import java.util.Map; import java.util.Set; import java.util.Tree

Jquery中獲取table中的方法

//獲取 table id=test123 第二列 文字值 ("#btnTest").click(function(){   $("#test123 tr td:nth-child(2)").each(function(){      alert($(this).tex

PostgreSQL中設定表中自增或迴圈

  在postgresql中,設定已存在的某列(num)值自增,可以用以下方法: //將表tb按name排序,利用row_number() over()查詢序號並將該列命名為rownum,建立新表t

mysql 查詢時間段內連續n天登陸人數

//30多萬條資料0.4秒 不到,查詢某時間段內連續登陸n天的使用者,1132條 SET @wy=0; SELECT DISTINCT uid FROM (SELECT MAX(date)-MIN(date) less,uid     FROM (SELECT date