在CSV列中查找出现次数超过3次的所有数字

时间:2018-04-17 12:43:09

标签: mysql

我基本上想要这个:if certain number is present >= 3 times then do some action ...

我的表格列是:enter image description here

正如您在此处所看到的那样,38列中存在absent_sids次数> = 3次,因此我希望对他进行一些操作,例如禁令或其他内容。但我不知道应该写什么SQL查询,因为; 我是php / mysql的新手 2.该列有逗号分隔的数字,我很难通过mysql查询在此列中搜索并在给定的时间段/日期内带来absent_sid> = 3次。

Plz帮助

1 个答案:

答案 0 :(得分:2)

这很长但很有效。步骤:1)使用CHAR_LENGTH和REPLACE函数将数组转换为行。 2)使用GROUP BY和HAVING COUNT搜索存在3次或更多次的数字

在此处查看演示:http://sqlfiddle.com/#!9/39afc0/2

    SELECT absent_sids
    from (
     SELECT
      tablename.aid,
      SUBSTRING_INDEX(
        SUBSTRING_INDEX(
          tablename.absent_sids, ',', numbers.n), ',', -1) as absent_sids
     FROM
      (select ORDINAL_POSITION as n
         from INFORMATION_SCHEMA.COLUMNS 
        where table_name='COLUMNS' 
          and ORDINAL_POSITION <= (
                       select round(max(length(absent_sids))/2) 
                       from tablename)) numbers 
     INNER JOIN tablename
     ON CHAR_LENGTH(tablename.absent_sids)
        -CHAR_LENGTH(REPLACE(tablename.absent_sids, ',', '')) 
          >= numbers.n-1) tab
    GROUP BY absent_sids
    HAVING COUNT(*) >= 3