mysql只选择具有一定长度的组

时间:2017-06-08 13:13:17

标签: mysql sql group-by

让我们说,我有一张这样的表:

表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的解决方案将为每个组返回一行,我希望全部看到它们。

5 个答案:

答案 0 :(得分: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

<强>输出:

enter image description here

在这里演示:

Rextester

答案 1 :(得分:0)

带有GROUP_CONCAT

HAVING应该向yu提供所请求的结果:

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

您可以使用以下查询:

$("#cs_name").keyup(function () {
        $(".cs_line").each(function () {
            if (!$(this).data('name').toLowerCase().includes($("#cs_name").val().toLowerCase())) {
                $(this).hide("fast");
            }
            else {
                $(this).show("fast");
            }
        });
    });

答案 4 :(得分:-1)

试试吧

 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