Hallo Leute,
beim surfen im Internet bin ich auf eine interessante SQL Aufgabe gestoßen.
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.
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
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
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.
Comment