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

誰かがこのSQLを説明できますか? (そして、どうすればそれを「パラメータ化」して関数として呼び出すことができますか?)

    (簡略化された!)関数は次のようになります:

    CREATE OR REPLACE FUNCTION my_custom_grouping(integer)
    RETURNS TABLE (
       grp integer,
       col1 double precision,
       col2 double precision,
       col3 double precision,
       col4 double precision,
       col5 double precision,
       col6 double precision,
       col7 double precision) AS
    $BODY$
        SELECT ceil(rank() OVER (ORDER BY col1) / $1)::int as grp
              ,col1, col2, col3, col4, col5, col6, col7
        FROM   mytable 
        ORDER  BY 1;
    $BODY$ LANGUAGE SQL;
    

    主なポイント:

    • これはlanguage SQLであることに注意してください。 、PL/pgSQL関数ではありません。 language plpgsqlを使用できます 、もここでは必要ありません。

    • ブードゥーのコアをウィンドウ関数rank() 、これはまったく同じことを行う必要がありますが、単純です。

    • サブクエリも完全に削除しました。必要ありません。

    • タイプdouble double precisionと呼ばれます PostgreSQLで。

    • 複数の行を返すには、関数をRETURNS SETOF recordとして定義します。 または RETURNS TABLE 私と同じように。

    • ORDER BY 位置パラメータを使用できるため、最初の列の計算を再度詳しく説明する必要はありません:ORDER BY 1
      ただし、同じgrp内の複数の行 。 ORDER BYに列または式を追加します 安定したソート順に到達するための句。




    1. MariaDB JSON_OBJECTAGG()の説明

    2. 挿入更新トリガー挿入または更新かどうかを判断する方法

    3. MySQL接続はnull参照をスローします

    4. AzureDataStudioを使用してSQLServerデータベースを作成する