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

mysqlでグループごとにn行を選択します

    多くの解決策があり、そのうちの1つはleft joinを使用することです。 そして、あなたはそれについてチェックするかもしれません

    select t1.* from test t1
    left join test t2
    on t1.type = t2.type and t1.price > t2.price
    group by t1.variety
    having count(*) <=1
    order by t1.type,t1.price
    

    ロジックは、タイプが同じで価格が他よりも低い同じテーブルで左結合を実行し、最後にgroup byを実行することです。 多様性を確認してから、count()を使用して、グループごとに必要なレコードの数を表示する必要があります。 mysqlでは、他のRDBMSで失敗する可能性のある任意の方法で、上記のクエリのようにgroupby句を自由に使用できることに注意してください。

    aliasについて混乱しているので、 、上記の例では、テーブル名はtestです。 クエリ内では、疑似名はt1として指定されます。 。また、自己結合を行う場合は、同じテーブルに一意のエイリアス名を付けることが重要です。上記の例では、同じテーブルがそれ自体と結合されているため、テーブルにエイリアス名を付ける必要があります。




    1. 新しい自動インクリメントIDで更新列を挿入する前のMySQLトリガー

    2. MySQLの2つの列でブール論理を実行するにはどうすればよいですか?

    3. ORはSQLServerのCASEステートメントではサポートされていません

    4. JSONをデータベースに保存するか、キーごとに新しい列を作成するか