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

カスタム集計関数

    中央値の計算を表示していますが、最初に表示されるテキスト値が必要ですか?

    以下はその方法です。最初のnull以外の値が必要だとすると、つまり。そうでない場合は、すでに値を持っているかどうかを追跡する必要があります。

    アキュムレータ関数は、plpgsqlおよびsqlとして記述されています。plpgsql関数を使用すると、変数名を使用してデバッグすることもできます。以前の累積値と新しい値に対してCOALESCEを使用し、最初の非nullを返します。つまり、アキュムレータにnull以外の値があるとすぐに、他のすべてが無視されます。

    最新(8.4以降)のバージョンのPostgreSQLを使用している場合は、この種の「first_value」ウィンドウ関数を検討することもできます。

    http://www.postgresql.org/docs/9.1/static /functions-window.html

    HTH

    BEGIN;
    
    CREATE FUNCTION remember_first(acc text, newval text) RETURNS text AS $$
    BEGIN
        RAISE NOTICE '% vs % = %', acc, newval, COALESCE(acc, newval);
        RETURN COALESCE(acc, newval);
    END;
    $$ LANGUAGE plpgsql IMMUTABLE;
    
    CREATE FUNCTION remember_first_sql(text,text) RETURNS text AS $$
        SELECT COALESCE($1, $2);
    $$ LANGUAGE SQL IMMUTABLE;
    
    -- No "initcond" means we start out with null
    --      
    CREATE AGGREGATE first(text) (
        sfunc = remember_first,
        stype = text
    );
    
    CREATE TEMP TABLE tt (t text);
    INSERT INTO tt VALUES ('abc'),('def'),('ghi');
    
    SELECT first(t) FROM tt;
    
    ROLLBACK;
    



    1. SQLSELECTステートメント

    2. リモートSQLデータベースへのAndroidアクセス

    3. Oracle SQL for INSERT/UPDATEのMERGEステートメントに条件を追加する

    4. SQLite外部キー