【问题标题】:mysql select only groups having certain lengthmysql只选择具有一定长度的组
【发布时间】:2017-06-08 13:13:16
【问题描述】:

可以说,我有一张这样的桌子:

表1

  id | val
_____________
   1 | a
   2 | b
   3 | b
   4 | a
   5 | b
   6 | a
   7 | c

我想让所有行按val 分组,但前提是组的大小为 3。所以预期的结果是:

[1, a], [4, a], [6, a]
[2, b], [3, b], [5, b]

[7, c] 应该被忽略,因为它的组的大小小于 3。

注意,having 的解决方案将为每个组返回一行,我想查看所有组。

【问题讨论】:

    标签: mysql sql group-by


    【解决方案1】:

    使用子查询来识别其组具有三个或更多成员的id 值,然后将其连接到原始表以限制结果集中的记录。

    SELECT t1.*
    FROM table1 t1
    INNER JOIN
    (
        SELECT val
        FROM table1
        GROUP BY val
        HAVING COUNT(*) >= 3
    ) t2
        ON t1.val = t2.val
    

    输出:

    演示在这里:

    Rextester

    【讨论】:

      【解决方案2】:

      有一个子查询返回至少出现 3 次的所有 val:

      select id, val
      from tablename
      where val in (select val
                    from tablename
                    group by val
                    having count(*) >= 3) 
      

      【讨论】:

        【解决方案3】:

        GROUP_CONCATHAVING 应该给你请求的结果:

        select Group_concat(id), value from table group by value having Count(*)>=3
        

        【讨论】:

          【解决方案4】:

          您可以使用以下查询:

          SELECT  
              id,
              val as letter, 
              (select count(*) FROM things WHERE val=letter) as number
            FROM things
          HAVING number >= 3;
          

          【讨论】:

            【解决方案5】:

            试试看

             select sel.id, sel.val 
                from 
                    (Select COUNT(*) over (partition by val order by val) rowcount, a.* 
                from table1 a) sel
                    where sel.rowcount = 3
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2011-03-06
              • 2017-04-13
              • 2018-04-05
              • 1970-01-01
              • 2019-01-18
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多