mysql选择值出现的记录
我希望你能帮我做这个。我一直在寻找建立MySQL查询的方法,该查询根据某个值出现的次数来选择行,但到目前为止还没有成功。我很确定我需要在某个地方使用count*,但我只能找到如何计算所有值或所有不同的值,而不是计算所有发生的次数 我有一张这样的桌子: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
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的行!非常好,谢谢!: