styri
Grünschnabel
Hallo zusammen.
Bin dabei, div. Größen von Tabellen und deren Indizes auszuwerten.
Hierbei entsteht eine Tabelle, deren letzte Spalten so aussehen:
TABLE_NAME: Tabellen Name
IDX_BYTES_ALLOCATED: Bytes die der Index belegt
TBL_IDX_SUM: Bytes, die die Tabelle mit allen zu ihr gehörenden Indizes belegt (per SUM() OVER(PARTITION BY))
PCT: TBL_IDX_SUM/SUM(DISTINCT TBL_IDX_SUM) OVER())*100, also wieviel Prozent TBL_IDX_SUM von allen (einmal) belegt.
Dem geneigten Leser fällt inzwischen evtl. auf, jede Tabelle wird so oft wiederholt, wie ein ihr zugehöriger Index aufgelistet ist. Mir ist klar, dass das keine schöne Normalform ist, macht so aber durchaus sinn.
Gut, ich möchte die Prozentwerte hinten gerne Kumulieren, aber eben je Tabelle, nicht je Index.
Also ich hätte gerne noch so eine Spalte:
Also von der Theorie so was wie:
SUM(DISTINCT PCT) OVER(ORDER BY TBL_IDX_SUM DESC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) PCT_KUM
Nun ist DISTINCT so leider nicht erlaubt. Bzw. mit DISTINCT kein ORDER BY -> keine Windowing Klausel.
Jemand eine Idee, wie ich das lösen könnte?
Die oben dargestellte "Tabelle" kommt durch viele subselects zusammen und soll eigentlich so weggespeichert werden. Also ein subselect auf diese "Tabelle" halte ich für keine schöne Lösung.
Danke im Voraus
Bin dabei, div. Größen von Tabellen und deren Indizes auszuwerten.
Hierbei entsteht eine Tabelle, deren letzte Spalten so aussehen:
PHP:
TABLE_NAME IDX_BYTES_ALLOCATED TBL_IDX_SUM PCT
xxxx 619446272 9549905920 18,53
xxxx 520880128 9549905920 18,53
xxxx 433586176 9549905920 18,53
xxxx 520617984 9549905920 18,53
xxxx 664797184 9549905920 18,53
xxxx 1238630400 9549905920 18,53
xxxx 435421184 9549905920 18,53
xxxx 970981376 9549905920 18,53
yyyy 220200960 1636892672 3,18
yyyy 168034304 1636892672 3,18
yyyy 129236992 1636892672 3,18
yyyy 178782208 1636892672 3,18
IDX_BYTES_ALLOCATED: Bytes die der Index belegt
TBL_IDX_SUM: Bytes, die die Tabelle mit allen zu ihr gehörenden Indizes belegt (per SUM() OVER(PARTITION BY))
PCT: TBL_IDX_SUM/SUM(DISTINCT TBL_IDX_SUM) OVER())*100, also wieviel Prozent TBL_IDX_SUM von allen (einmal) belegt.
Dem geneigten Leser fällt inzwischen evtl. auf, jede Tabelle wird so oft wiederholt, wie ein ihr zugehöriger Index aufgelistet ist. Mir ist klar, dass das keine schöne Normalform ist, macht so aber durchaus sinn.
Gut, ich möchte die Prozentwerte hinten gerne Kumulieren, aber eben je Tabelle, nicht je Index.
Also ich hätte gerne noch so eine Spalte:
PHP:
PCT_KUM
18,53
18,53
18,53
18,53
18,53
18,53
18,53
18,53
21,71
21,71
21,71
21,71
Also von der Theorie so was wie:
SUM(DISTINCT PCT) OVER(ORDER BY TBL_IDX_SUM DESC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) PCT_KUM
Nun ist DISTINCT so leider nicht erlaubt. Bzw. mit DISTINCT kein ORDER BY -> keine Windowing Klausel.

Jemand eine Idee, wie ich das lösen könnte?
Die oben dargestellte "Tabelle" kommt durch viele subselects zusammen und soll eigentlich so weggespeichert werden. Also ein subselect auf diese "Tabelle" halte ich für keine schöne Lösung.
Danke im Voraus
Zuletzt bearbeitet: