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

SQLの個別の複数の列

    質問は通常、ウィンドウ関数を使用して解決されます:

    select *
    from (
       select book_id, author_id, mark, year, 
              row_number() over (partition by author_id order by case mark when 'GREAT' then 1 when 'MEDIUM' then 2 else 3 end) as rn
       from books
    ) t
    where rn = 1;
    

    上記は標準のANSISQLですが、Postgresでは(独自の)distinct onを使用しています 通常ははるかに高速です:

    select distinct on (author_id) book_id, author_id, mark, year, 
    from books
    order by author_id, 
             case mark when 'GREAT' then 1 when 'MEDIUM' then 2 else 3 end
    



    1. Oracleは、to_date(literal)の形式に応じて、インデックス付き列を使用または無視します。

    2. MySQL SELECT LIKEまたはREGEXPは、1つのレコード内の複数の単語に一致します

    3. SUM()を使用したMYSQL Select Query

    4. PDOException SQLSTATE[HY000][2002]ローカルコンピューターで接続がタイムアウトしました