我有一个包含以下字段的表:
domainname | domian_name_cert_no | keyvalue
domian_name_cert_no
是唯一的,以计数器结束; 1,2,3等。有两个或更多domian_name_cert_no
分享keyvalue
的可能性。我需要列出这些案例。所以我有以下语句列出第一个keyvalue
中domian_name_cert_no
的出现次数(即,只有= 1。我不关心_2,_3中的重复项。)
select domainname, domian_name_cert_no, count(keyvalue), keyvalue
from db.table
where domian_name_cert_no like '%_1'
group by (keyvalue)
having count(keyvalue)>1;
假设一个输出如下: xyx,xyx_1,10,777
然后,根据之前的输出我知道有10次出现,现在我需要详细列出这些共享keyvalue
的域名,所以我使用了:
SELECT a.*
FROM db.table a
INNER JOIN
(
SELECT keyvalue
FROM db.table
GROUP by keyvalue
HAVING COUNT(keyvalue) = 10
) b
ON a.keyvalue = b.keyvalue;
这些正确的陈述是否基于我对需求的解释?我不太确定我在第二句话中做了什么:HAVING COUNT(keyvalue) = 10
。
MySQL专家,请告诉我这些陈述是否正确。
答案 0 :(得分:0)
根据OP附加评论更改
您的第一个查询看起来不太正确。
select keyvalue, count(domian_name_cert_no) as rec_count
from db.table
where domian_name_cert_no like '%_1'
group by keyvalue
having rec_count>1;
对于您的第二个查询,我不确定您在尝试什么。我最好的猜测是,您希望获得具有您在第一个查询中标识的键值的所有记录。只需将您的第一个查询插入内连接即可。您不需要HAVING
声明。
select a.*
from
db.table a
inner join
(select keyvalue, count(domian_name_cert_no) as rec_count
from db.table
where domian_name_cert_no like '%_1'
group by keyvalue
having rec_count>1) b
on a.keyvalue = b.keyvalue;
希望我理解你的问题。