sql >> データベース >  >> RDS >> Mysql

グループ化された結果の各グループの上位nレコードを取得します

    UNION ALLを使用して、これを行う1つの方法を次に示します。 ( SQL Fiddle withDemo を参照してください。 )。これは2つのグループで機能します。3つ以上のグループがある場合は、groupを指定する必要があります。 各groupのクエリに番号を付けて追加します :

    (
      select *
      from mytable 
      where `group` = 1
      order by age desc
      LIMIT 2
    )
    UNION ALL
    (
      select *
      from mytable 
      where `group` = 2
      order by age desc
      LIMIT 2
    )
    

    これを行うにはさまざまな方法があります。状況に最適なルートを決定するには、この記事を参照してください:

    http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql/

    編集:

    これはあなたにも役立つかもしれません、それは各レコードの行番号を生成します。上記のリンクの例を使用すると、行番号が2以下のレコードのみが返されます。

    select person, `group`, age
    from 
    (
       select person, `group`, age,
          (@num:=if(@group = `group`, @num +1, if(@group := `group`, 1, 1))) row_number 
      from test t
      CROSS JOIN (select @num:=0, @group:=null) c
      order by `Group`, Age desc, person
    ) as x 
    where x.row_number <= 2;
    

    デモ をご覧ください。



    1. MySQLデータベースへの接続

    2. ExcelとAccess:切り替える時期はいつですか?

    3. ブール列のSQLAlchemyfunc.count

    4. SQL /HQLJavaからのテーブル名と列名の解析