Veröffentlicht: von

  • COUNT(Spalte) zählt die von NULL verschiedenen Werte in einer Spalte, COUNT(*) auch die Zeilen, die komplett NULL sind.
  • Alle Gruppenfunktionen ignorieren NULL-Werte im Gegensatz zu den Operatoren +, – * und  /: 9 + NULL= NULL
  • Aggregatfunktionen (Synonym: Gruppenfunktionen) können mit Single-Rowfunktionen geschachtelt werden. SELECT TRUNC(AVG(gehalt)) FROM angestellte, Tiefe der Schachtelung ist beliebig
  • Zwei Gruppenfunktionen können aufeinander angewendet werden, aber nicht drei: Zulässig ist SELECT COUNT(AVG(Gehalt) ) FROM angestellte GROUP BY GEHALT, aber nicht SELECT COUNT(AVG(MIN(Spalte))) FROM angestellte GROUP BY GEHALT und auch nicht SELECT COUNT(AVG(Gehalt));  ohne group BY.
  • Es gibt eine zweite Mittelwertfunktion MEDIAN neben AVG, d.h. SELECT median(gehalt), avg(gehalt)  from angestellte; ergibt zwei verschiedenen Werte. Die MEDIAN-Funktion sortiert numerische Werte in der Reihenfolge aufsteigend und nimmt bei einer ungerade Zahl den mittleren, sonst eine interpolierten Wert dazwischen
  • AVG und MEDIAN arbeiten nur mit numerischen Werten..
  • Die Rank -Funktion gibt aus, an wievielter Stelle ein Wert steht: SELECT RANK(4000) WITHIN GROUP (ORDER BY gehalt) FROM  angestellte  bedeutet, dass das Gehalt 4000 die 12. Stelle einnimmt. Der Parameter RANK(Wert) kann nur ganzzahlige Werte, ohne Nachkommastellen, aufnehmen .
  • FIRST und LAST (s.u.) gibt nur den ersten bzw. den letzten Wert einer sortierten Folge von Werten aus.
  • Gruppenfunktionen können nicht in der WHERE -Klausel verwendet werden.
  • having muss immer nach where stehen
  • siehe auch: DBWiki für CUBE, ROLLUP, GROUPING
  • ORDER BY in Kombination mit GROUP BY hat einige Einschränkungen: Es kann nur ein ORDER BY geben auf Ausdrücken aus der GROUP BY-Klausel, Ausdrücken aus der SELECT-Liste, über Aggregatfunktionen oder über die USER, SYSDATE und UID.

Zum Ausprobieren:

Login advbs06.gm.fh-koeln.de, benutzer: FAHRRAD

SELECT RANK(4000) WITHIN GROUP (ORDER BY gehalt) from angestellte;

SELECT MAX(gehalt) KEEP (DENSE_RANK FIRST Order BY GEHALT) FROM angestellte;

SELECT MAX(gehalt) KEEP (DENSE_RANK LAST  Order BY GEHALT) FROM angestellte;