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

ウィンドウ関数のSQL条件

    All-at-once操作:

    そして素晴らしい章ウィンドウ関数への影響

    あなたが持っているとしましょう:

    CREATE TABLE Test ( Id INT) ;
     
    INSERT  INTO Test VALUES  ( 1001 ), ( 1002 ) ;
    
    SELECT Id
    FROM Test
    WHERE Id = 1002
      AND ROW_NUMBER() OVER(ORDER BY Id) = 1;
    

    ケース1:

    If ( Id = 1002 ) is first, then if ( ROW_NUMBER() OVER(ORDER BY Id) = 1 )

    結果:1002

    ケース2:

    If ( ROW_NUMBER() OVER(ORDER BY Id) = 1 ), then check if ( Id = 1002 )かどうかを確認します

    結果:空

    必要なものを取得するには、ウィンドウ関数をCTE/subqueryでラップします。 ゴードンの回答 のように :

    ;WITH cte AS
    (
      SELECT t.*, MAX(AVG) OVER (PARTITION BY city) AS average
      FROM avgTemperatures t
    )
    SELECT *
    FROM cte
    where average > 19
    ORDER BY id;
    

    db<>フィドルデモ

    出力:

    ╔═════╦══════════╦═════╦═════════╗
    ║ id  ║   city   ║ avg ║ months  ║
    ╠═════╬══════════╬═════╬═════════╣
    ║   1 ║ New-York ║  20 ║     3   ║
    ║   2 ║ New-York ║  19 ║     6   ║
    ║   3 ║ New-York ║  15 ║    12   ║
    ║   4 ║ New-York ║  15 ║    24   ║
    ║  11 ║ Miami    ║  28 ║     1   ║
    ║  12 ║ Miami    ║  25 ║     4   ║
    ║  13 ║ Miami    ║  21 ║    12   ║
    ║  14 ║ Miami    ║  22 ║    15   ║
    ║  15 ║ Miami    ║  20 ║    24   ║
    ╚═════╩══════════╩═════╩═════════╝
    


    1. zsh:コマンドが見つかりません:mysql

    2. PostgreSQLがトリガー関数のNEWレコードのフィールドを動的に変更する

    3. Postgresqlの関数

    4. Oracleで大文字に変換する2つの方法