2012-01-04 12 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 

今、私はlastloginipがテーブル内で複数回検出された行をselect ALL、その後、それらの行の数を与えたいと思います。

この場合、ユーザ1,2,6,7,8のlastloginipが複数回存在するため、数字5 が返されます。

私はすでに

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

を使用してみました。しかし、それは私が正しく、このクエリを設定する方法を確認していない代わりに、5
の数2を返しました。インターネット上で私の調査結果のほとんどはSUM()、その後、唯一の2行を示すか、代わりに5

答えて

5

まずCOUNT()の数2を与えておく:

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出現数 FROMテスト GROUP BY lastloginip HAVING COUNT(ID)> 1)t – Snowy007

+0

私は何か愚かなことをしたかもしれないと感じています。うまくいけば、他の誰かが私の答えを見て、必要に応じて修正することができます。 – marnir

0

この文字列で検索してください。

SELECT SUM(loginip) 
FROM(
    SELECT 
    lastloginip, 
    COUNT(lastloginip) 
    as loginip 
    FROM test 
    GROUP BY lastloginip 
    HAVING COUNT(ID)>1 
)t 
関連する問題