Announcement

Collapse
No announcement yet.

SQL Abfrage

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • SQL Abfrage

    Hallo Leute,
    beim surfen im Internet bin ich auf eine interessante SQL Aufgabe gestoßen.

    hallo zusammen,

    ich komme bei einem query leider nicht weiter.
    Vielleicht kann jemand weiterhelfen.

    Meine Postgres Tabelle sieht folgendermassen aus:

    Code:

    CREATE TABLE Table1
    ("nummer" int, "nachname" varchar(5),"breite" varchar(5),"laenge" varchar(5), "vorname" varchar(9), "cash" numeric)
    ;

    INSERT INTO Table1
    ("nummer", "nachname","breite","laenge","vorname", "cash")
    VALUES
    (2, 'Bert', '555','2','Brecht', 0.758),
    (2, 'Harry','555','2', 'Belafonte', 0,758),
    (3, 'Elvis','543','33', 'Presley', 0.357),
    (3, 'Roy','543','31', 'Orbison', 0.357),
    (4, 'Mark','52','33', 'Twain', 1.555),
    (4, 'Ella','69','33', 'Fitz', 0.333);

    Nun möchte ich die Reihen aufgrund der Nummer gruppieren, die Namen koalisieren und die Werte bei Cash addieren.
    Soweit kein Problem. Jedoch möchte ich die Werte nur addieren wenn breite und länge in den gruppierten Reihen unterschiedlich sind.
    falls nicht soll nicht addiert werden. Meine gewünschte Ausgabe wäre beispielsweise:

    Code:

    2 Bert Brecht 0,758
    Harry Belafonte



    4 Mark Twain 1,888
    Ella Fitz

    Ich denke ich benötige noch ein Distinct on, weiß aber leider nicht wie.

    hier mein bisheriger quert:

    Code:

    SELECT DISTINCT
    nummer,
    array_to_string(array_agg(nachname|| ', ' ||coalesce(vorname, '')), '\n') as name,
    sum (cash) as cash
    FROM (
    SELECT DISTINCT
    nummer, vorname, nachname, cash
    FROM Table1
    ) AS m
    GROUP BY nummer
    ORDER BY nummer;


    Hier eine Fiddle zum bisherigen Stand:
    SQL Fiddle


    Besten Dank,

    Tony
    Mir geht die Aufgabe jetzt nicht mehr aus dem Kopf bis ich sie in Oracle umsetzen kann :P
    Habt ihr Lösungsvorschläge?


    Anbei noch der Oracle Code für das Erstellen und Füllen der Tabelle:

    [highlight=sql]
    CREATE TABLE Table1
    (nummer int, nachname varchar(5), breite varchar(5), laenge varchar(5), vorname varchar(9), cash float);

    INSERT INTO Table1 VALUES (2, 'Bert', '555','2','Brecht', 0.758);
    INSERT INTO Table1 VALUES (2, 'Harry', '555', '2', 'Belafonte', 0.758);
    INSERT INTO Table1 VALUES (3, 'Elvis','543','33', 'Presley', 0.357);
    INSERT INTO Table1 VALUES (3, 'Roy','543','31', 'Orbison', 0.357);
    INSERT INTO Table1 VALUES (4, 'Mark','52','33', 'Twain', 1.555);
    INSERT INTO Table1 VALUES (4, 'Ella','69','33', 'Fitz', 0.333);[/highlight]


    P.S. Ich würde es gerne in SQL und nicht in PL/SQL umsetzen.
    Zuletzt editiert von FlexGer; 27.11.2012, 11:03.

  • #2
    Ich glaube, ich habe die Aufgabe schon gelöst

    [highlight=SQL]
    select abc.nummer,
    concat(abc.vorname, abc.nachname),
    blubb.sum_cash
    from (
    select b.nummer AS nummer,
    sum(distinct b.cash) AS sum_cash
    from table1 a,
    table1 b
    where a.nummer (+)= b.nummer
    and a.cash (+)!= b.cash
    group by b.nummer
    ) blubb,
    table1 abc
    where blubb.nummer = abc.nummer
    order by nummer;
    [/highlight]

    Comment

    Working...
    X