2016-09-12 6 views
-1

マイテーブル:選択k行

NAME SURNAME 
John Smith 
Jane Smith 
Alice Smith 
James Bond 
James Cameroon 
David Beckham 

私はデシベルを持っていると私は、各SURNAMEk行を選択します。

SELECT * FROM people GROUP BY SURNAME; 

、出力は次のとおりです:k=1にとってはだ

Alice Smith 
James Bond 
James Cameroon 
David Beckham 

私は(存在する場合)2つのスミス、2ボンズ、2になるだろうk=2を照会する方法を、見つけることができませんカメルーンなど、または一般的に:kスミス、kボンズ、kカメルーンなど。もしこのk以下の人がいる場合は、SURNAMEすべてを選択してください。 MySQLで可能ですか?

+0

私はあなたが見て、私はあなたが何を意味するか理解できない句 – apomene

+0

@apomeneを持つべきだと考えています。 – xenteros

+0

'k = 2'で' 1''Bond'しかない場合は、この値を選択すべきでしょうか? –

答えて

1

のために取得します。この方法は、次のクエリを使用することができます。

SELECT NAME, SURNAME 
FROM (
    SELECT NAME, SURNAME, 
     @rn := IF(@s = SURNAME, @rn + 1, 
        IF(@s := SURNAME, 1, 1)) AS rn 
    FROM mytable 
    CROSS JOIN (SELECT @rn := 0, @s = '') AS vars 
    ORDER BY SURNAME) AS t 
WHERE t.rn <= 3 

上記のクエリはk=3のための一例を示しています。それは、OPに引用されているサンプルテーブルからすべてのレコードを選択します。

Demo here

+0

それはアートです!ありがとう! – xenteros

0
SELECT Name,Surname,Count(SurName) AS k FROM people 
GROUP BY SURNAME 
HAVING k>=2 
+0

結果に列を追加するだけです。それは間違った答えです:/ – xenteros

-1

あなたはsurnameのための明確なことができますし、同じテーブルでそれに参加するが、あなたのkに制限することができます。あなたは、各surnamek

SELECT DISTINCT(`surname`) 
    LEFT JOIN (
      SELECT `name` FROM `people` p2 where p2.surname = p1.surname limit 2 
     ) x 
FROM `people` p1 
+0

詳細を編集してください。コード専用と「試してください」の回答は、検索可能なコンテンツが含まれていないため、推奨されません。なぜ誰かが「これを試してみる」べき理由を説明しません。 – abarisone

+0

@abarisoneありがとう、編集されました。 –