Ich würde mich bitte fragen, ob jemand mir eine Abfrage machen könnte, die Werte von numerischen Spalte und von Hstore-Spalte SUM up. Dies ist offensichtlich zu viel für meine SQL-Fähigkeiten.PostgreSQL, SUM und GROUP aus numerischer Spalte und hstore
Eine Tabelle:
DROP TABLE IF EXISTS mytry;
CREATE TABLE IF NOT EXISTS mytry
(mybill int, price numeric, paym text, combined_paym hstore);
INSERT INTO mytry (mybill, price, paym, combined_paym)
VALUES (10, 10.14, '0', ''),
(11, 23.56, '0', ''),
(12, 12.16, '3', ''),
(13, 12.00, '6', '"0"=>"4","3"=>"4","2"=>"4"'),
(14, 14.15, '6', '"0"=>"2","1"=>"4","3"=>"4","4"=>"4.15"'),
(15, 13.00, '1', ''),
(16, 9.00, '4', ''),
(17, 4.00, '4', ''),
(18, 4.00, '1', '');
Hier ist eine Liste von Rechnungen, Preis und Zahlungsmethode für jede Rechnung.
Einige Rechnungen (hier 13 und 14) könnten kombinierte Zahlung haben. Zahlungsmethoden sind von 0 bis 5 aufgeführt, die spezifische Zahlungsmethode beschreibt.
Dazu mache ich diese Anfrage:
SELECT paym, SUM(price) FROM mytry WHERE paym::int<6 GROUP BY paym ORDER BY paym;
Diese fasst die Preise für Zahlungsmethoden 0-5. 6 ist keine Zahlungsmethode, sondern eine Flagge, was bedeutet, dass wir hier Zahlungsmethoden und Preise von hstore 'combined_paym' betrachten sollten. Das weiß ich nicht zu lösen. Zahlungsmethoden und Preise von "kombinierter Zahlung" mit denen von "Zahlung" und "Preis" zu summieren.
Diese Abfrage gibt Ergebnis:
"0";33.70
"1";17.00
"3";12.16
"4";13.00
Aber Ergebnis ist falsch, da hier nicht summierten Daten von Bills 13 und 14
Echt Ergebnis sein sollte:
"0";39.70
"1";21.00
"2";4.00
"3";20.16
"4";17.15
Bitte, wenn jemand kann mache mir eine richtige Abfrage, die das letzte Ergebnis von gegebenen Daten geben würde.
Ich dachte an so etwas wie dies konnte sie aber nicht zusammen stellen. Groß! Dieser Look ist wie ein gutes Ergebnis. Außerdem benutze ich nie zuvor "each" anstelle von "-" zum Entknoten von hstore-Elementen. Danke für die Lösung und praktikables Beispiel. –