Ich bin sehr neu in SQL und ich habe mit einem ziemlich grundlegenden Problem gekämpft. Ich habe versucht, ein paar verschiedene Wege zu gehen, aber bisher hat noch nichts geklappt.PostgreSQL Mit mehreren Spalten, um Zahlen für einen Prozentsatz zu berechnen
Also in meiner Tabelle tourismdata habe ich 4 Spalten: transportType, Monat, Jahr und Anzahl. Beispiel:
Month Year Transport Type Count
Nov 1992 Car 100
Nov 1992 Plane 250
Dec 1992 Car 200
Dec 1992 Plane 250
Jan 1993 Car 200
Jan 1993 Plane 200
Außer ich habe tatsächlich vier verschiedene Transportarten und viele weitere Monate und Jahre.
Ich möchte den prozentualen Anteil jedes Transports im Laufe der Jahre berechnen. So würde meine gewünschte Ausgabe etwas entlang der Linien der folgenden sein:
Year Transport Type Percentage
1992 Car 37.5%
1992 Plane 62.5%
1993 Car 50%
1993 Plane 50%
Meine aktuellen Code sieht wie folgt aus:
WITH t1 as(
select transport, SUM(ncount) AS transportTotal
from touristdata
GROUP BY transport)
SELECT years, touristdata.transport, ROUND(100.0 *(transportTotal/SUM(ncount)))
FROM touristdata, t1
GROUP BY years;
In dieser Form erhalte ich die Fehlermeldung:
ERROR: column "touristdata.transport" must appear in the GROUP BY clause or be used in an aggregate function
LINE 5: SELECT years, touristdata.transport, ROUND(100.0 *(transpor...
Aber ich wissen, dass das Hinzufügen von tourismdata.transport und transportTotal in die GROUP BY auch nicht funktioniert. Ich habe es versucht, um sicherzustellen, und ich endete mit 4 Einträge für jede Transportart pro Jahr.
Ich hatte nicht die letzte 'GROUP BY Jahre' vorher, und ich versuchte es mit Unterabfragen, aber ich konnte es nicht herausfinden.
Wenn mir jemand helfen könnte, würde ich es sehr zu schätzen wissen!
Danke für die Hilfe, das ist für mich gearbeitet. –