MySQL - 在WHERE子句中使用COUNT(*)?
问题描述:
好吧所以我想找到所有的行中有相同的值(或至少一对)MySQL - 在WHERE子句中使用COUNT(*)?
I.E.
James| 19.193.283.19
John| 20.134.232.344
Jack| 19.193.283.19
Jonny| 19.193.283.19
我希望它在它返回行詹姆斯,杰克和强尼 - 作为一个以上的行具有IP '19 .193.283.19' 。
我试着做回答什么其他类似的问题:
select *
from `Zombie`
group by `Ip`
having count(*) > 1
order by `Ip` desc
,但它只是返回1行的与类似“IP”我想每一行的一对或更多。
我该如何修改SQL,以便它返回所有分隔行?
非常感谢。
答
你可以使用一个exists
子查询,发现有一个匹配的行所有行具有相同Ip
:
select *
from YourTable as yt1
where exists
(
select *
from YourTable as yt2
where yt1.name <> yt2.name
and yt1.Ip = yt2.Ip
)
排序的行数与同Ip
可以用自连接来完成,像:
select yt1.name
, yt1.Ip
from YourTable as yt1
join YourTable as yt2
on yt1.name <> yt2.name
and yt1.Ip = yt2.Ip
group by
yt1.name
, yt1.Ip
order by
count(yt2.name) desc
答
另一种方式是与你已经使用子查询(找到IPS现有的多行)加入你的表:
SELECT t.name
, t.Ip
FROM
YourTable AS t
JOIN
(SELECT Ip
, COUNT(*) AS cnt
FROM YourTable
GROUP BY Ip
HAVING COUNT(*) > 1
) AS td
ON td.Ip = t.Ip
ORDER BY
td.cnt DESC
, t.Ip
, t.name
请显示您的架构。 – MikeyB