2012-01-04 84 views
3

好吧,我有一个名为'test'和3列的单个MySQL表。现在选择所有出现多次的行

ID | playername | lastloginip 
----------------------------- 
1 | user 1  |  1 
2 | user 2  |  2 
3 | user 3  |  3 
4 | user 4  |  4 
5 | user 5  |  5 
6 | user 6  |  1 
7 | user 7  |  1 
8 | user 8  |  2 

,我想select ALL其中lastloginip被发现多次在表中的行,然后给这些行的计数。

在这种情况下,它应该返回数字5 ,因为用户1,2,6,7和8具有多次找到的lastloginip。

我已经使用

SELECT COUNT(*) 
FROM (
    SELECT * 
    FROM test 
    GROUP BY lastloginip 
    HAVING COUNT(*) > 1 
) t 

尝试,但该还给我不知道如何正确地设置此查询的号码2,而不是5
。我的大部分在互联网上发现一直只显示2行或给予2号,而不是5

回答

5

首先COUNT(),然后SUM()

SELECT SUM(occurences) 
FROM 
(
    SELECT COUNT(*) AS occurences 
    FROM test 
    GROUP BY lastloginip 
    HAVING COUNT(*)>1 
) t 
+0

谢谢,我想我现在拥有它。我将你的第一个“误解”版本的查询改为了一些有用的东西。 SELECT SUM(occurrences)FROM( SELECT COUNT(ID)AS occurrences FROM test GROUP BY lastloginip HAVING COUNT(ID)> 1)t – Snowy007 2012-01-04 00:24:29

+0

我有一种感觉,我可能做了一些愚蠢的事情。希望其他人可以看看我的答案,并在需要时进行更正。 – marnir 2012-01-04 00:27:05

0

尝试此查询。

SELECT SUM(loginip) 
FROM(
    SELECT 
    lastloginip, 
    COUNT(lastloginip) 
    as loginip 
    FROM test 
    GROUP BY lastloginip 
    HAVING COUNT(ID)>1 
)t 
相关问题