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

MySQL-groupbyによって返される行を制御します

    これは、列のグループごとの最大値の選択と呼ばれます。 mysqlのさまざまなアプローチがあります。

    これが私がそれをする方法です:

    SELECT *
    FROM (SELECT id, max(version_id) as version_id FROM table GROUP BY id) t1
    INNER JOIN table t2 on t2.id=t1.id and t1.version_id=t2.version_id
    

    これは比較的効率的ですが、mysqlはサブクエリ用にメモリ内に一時テーブルを作成します。このテーブルの(id、version_id)にすでにインデックスがあると思います。

    このタイプの問題に対して多かれ少なかれサブクエリを使用する必要があるのはSQLの欠陥です(半結合 別の例です。

    サブクエリはmysqlで十分に最適化されていませんが、無相関のサブクエリは、メモリではなくディスクに書き込まれるほど大きくない限り、それほど悪くはありません。このクエリには2つのintしかないため、サブクエリはそれが発生するずっと前に数百万行になる可能性がありますが、最初のクエリのselect*サブクエリはこの問題をはるかに早く受ける可能性があります。



    1. .NET / SQLのテーブル名をパラメータ化しますか?

    2. SQL*PlusでOraclecreatetableステートメントを取得する方法

    3. アソシエーションテーブルの正しい名前は何ですか(多対多の関係)

    4. Oracleで外部キーを使用する方法