[Oracle] Prozentrechnung/ratio_to_report

Guten Tag,

also absoluter Neuling muss ich mich gerade in eine Oracle Datenbank einarbeiten.

Folgende Situation:
Ich soll abfragen wie viele Ladungen auf verschiedenen LKWs auf einer bestimmten Strecke (Start => Ziel) in einem bestimmten Zeitraum transportiert werden. Zusätzlich soll ich die prozentuale Verteilung der Ladungen angeben.

Meine ursprüngliche Query (ohne Prozent):
SELECT start, ziel, ladung, datum
FROM table1
WHERE
datum BETWEEN ‚31.10.05‘ AND ‚30.11.05‘
ORDER BY ladung DESC

So weit so gut…nur schaff ich es nicht, den ganzen Kram als Prozent darzustellen

Mein bisheriger Lösungsansatz:
SELECT start, ziel, ladung, datum, ratio_to_report(ladung) over()*100
FROM table1
WHERE
datum BETWEEN ‚31.10.05‘ AND ‚30.11.05‘
ORDER BY ladung DESC
damit bekomm ich die aber die prozentuale Verteilung bezogen auf die gesamte Tabelle & und somit gesamten Zeitraum…

Meine FRAGE: Wie schaffe ich es, dass die Anzahl der Ladungen prozentual darzustellen, allerdings nur über einen bestimmten Zeitraum??

(Ich hab schon probiert SELECT start, ziel, ladung, datum, ladung/SUM(ladung) etc abzufragen, aber ich kann keine Gruppenfunktion (SUM) mit den Einzelfunktionen (start, ziel,…) zusammen packen. Ein weiterer Ansatz wäre über temporäre Tabellen zu gehen, aber das krieg ich nicht progammiert…)

Vielen Dank & liebe Grüße

Hi!

Hast Du es schon mal mit einer View bzw. mit einer Sub-Query versucht?

Das würde dann in etwa so aussehen:

select start, ziel, ladung, datum, ratio\_to\_report(ladung)over()\*100
from (select start,ziel,ladung,datum
 from table1
 where datum ...
 order by ...)

Meine FRAGE: Wie schaffe ich es, dass die Anzahl der Ladungen
prozentual darzustellen, allerdings nur über einen bestimmten
Zeitraum??

Ev. so wie oben beschrieben?

Grüße,
Tomh

PS: ratio_to_report … ich sollte mein Standard-Oracle mal wieder auffrischen … wer weiß, wieviel ich schon wieder unnötig herumgerechnet habe …

Perfekt!! Vielen Dank! Funktioniert hervorrangend.

Hab noch eine Erweiterung, wenn man den Output auf die Top 25 reduzieren will:

SELECT start, ziel, anzahl, datum, round(anzahl/sum(anzahl) over(),4)*100 as percentage
FROM
(SELECT start, ziel, anzahl, datum
FROM
table

WHERE
datum BETWEEN ‚31.10.05‘ AND ‚30.11.05‘

ORDER BY anzahl DESC)

WHERE ROWNUM