Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Trickkiste: Multiplikations-Aggregation

Dieses Thema im Forum "PostgreSQL" wurde erstellt von akretschmer, 25 Februar 2014.

  1. akretschmer

    akretschmer Datenbank-Guru

    Irgendwer fragte, warum es sum() und avg() gibt, aber kein mul() als Aggregation.

    Was für eine Frage! Do-it-yourself!

    Code:
    test=*# create table demo (cat int, val int);
    CREATE TABLE
    Time: 1,105 ms
    test=*# copy demo from stdin;
    Enter data to be copied followed by a newline.
    End with a backslash and a period on a line by itself.
    >> 1  2
    >> 1  4
    >> 1  6
    >> 2  4
    >> 2  3
    >> 2  2
    >> 3  7
    >> 3  8
    >> 3  10
    >> \.
    Time: 23195,573 ms
    --
    -- nun haben wir erst einmal eine Tabelle. Die Spalte val soll multipliziert werden, gruppiert nach cat
    -- wir bauen usn eine mul() - Aggregation:
    --
    test=*# create or replace function mul(int,int) returns int as $$ select $1 * $2;$$ language sql;
    CREATE FUNCTION
    Time: 0,350 ms
    test=*# create aggregate mul (int) (sfunc = mul, stype = int, initcond = 1);
    CREATE AGGREGATE
    Time: 0,624 ms
    --
    -- diese besteht aus einer Funktion, hier mul(int, int), und einer Aggregation, die diese Funktion nutzt
    -- nun die Anwendung:
    --
    test=*# select cat, mul(val) from demo group by cat;
     cat | mul
    -----+-----
      1 |  48
      3 | 560
      2 |  24
    (3 rows)
    

    Cool, oder?
     
    Hony% gefällt das.
  2. ukulele

    ukulele Datenbank-Guru

    Es geht aber noch viel einfacher !!!1Elf
    Code:
    
        SELECT CAST(ROUND(
    
          COALESCE(EXP(SUM(LOG( ABS(NULLIF(sample,0))))),0)
    
           * SIGN(MIN( ABS(sample)))
    
           * (COUNT(NULLIF(SIGN(sample),1))%2*-2+1)
    
          ,0)  AS INTEGER) AS product
    
         FROM MyTable 
    http://www.extremeexperts.com/sql/tips/Multiplycolumnvalue.aspx
    Eine eigene Funktion ist also mal völlig überflüssig da sich das mathematisch so einfach gestaltet.
     
  3. akretschmer

    akretschmer Datenbank-Guru


    ROFL ;-)
     
Die Seite wird geladen...
Ähnliche Themen - Trickkiste Multiplikations Aggregation
  1. akretschmer
    Antworten:
    3
    Aufrufe:
    2.367
  2. akretschmer
    Antworten:
    0
    Aufrufe:
    1.601

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden