Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql选择值出现的记录_Mysql_Sql_Count - Fatal编程技术网

mysql选择值出现的记录

mysql选择值出现的记录,mysql,sql,count,Mysql,Sql,Count,我希望你能帮我做这个。我一直在寻找建立MySQL查询的方法,该查询根据某个值出现的次数来选择行,但到目前为止还没有成功。我很确定我需要在某个地方使用count*,但我只能找到如何计算所有值或所有不同的值,而不是计算所有发生的次数 我有一张这样的桌子: info setid -- -- A 1 B 1 C 2 D 1 E 2 F 3 G 1 H 3 我需要的是一个查询,它将选择setid出现一定次数x的所有行 所以使用x=2应该给我 C

我希望你能帮我做这个。我一直在寻找建立MySQL查询的方法,该查询根据某个值出现的次数来选择行,但到目前为止还没有成功。我很确定我需要在某个地方使用count*,但我只能找到如何计算所有值或所有不同的值,而不是计算所有发生的次数

我有一张这样的桌子:

info setid
--   --
A    1
B    1
C    2
D    1
E    2
F    3
G    1
H    3
我需要的是一个查询,它将选择setid出现一定次数x的所有行

所以使用x=2应该给我

C    2
E    2
F    3
H    3
A    1
B    1
D    1
G    1
因为setid2和setid3都会出现两次。使用x=1或x=3不应该给出任何结果,而选择x=4应该给出任何结果

C    2
E    2
F    3
H    3
A    1
B    1
D    1
G    1
因为只有setid 1出现4次

我希望你们能帮助我。在这一点上,我已经寻找答案很久了,我甚至不确定这是否可以在MySQL中完成

select * from mytable
where setid in (
    select setid from mytable
    group by setid
    having count(*) = 2
)
您可以在子查询的having count*部分的表中指定setid需要出现的次数

考虑以下使用不相关子查询的语句:

选择。。。从t1开始,其中t1.a在t2中选择b; 优化器将语句重写为相关子查询:

选择。。。从t1中选择1,其中t2.b=t1.a; 如果内部查询和外部查询分别返回M行和N行,则执行时间的顺序为OM×N,而不是像不相关子查询那样的OM+N

但这次模糊树解决方案中的子查询是完全多余的:

SELECT
     set_id,
     GROUP_CONCAT(info ORDER BY info) infos
     COUNT(*) total
FROM
    tablename
GROUP_BY set_id
    HAVING COUNT(*) = 2

啊,当然!我现在明白了:这个解决方案使用having count*来确定哪些setid出现了所需的次数,然后选择具有这些setid的行!非常好,谢谢!: