SERPland Blog

Oracle SQL: Summarize a calculated column (like a count(*) column) with ROLLUP

· 502 words · 3 minutes to read

You have a simple sql statement like this:

select machine, count(*) as users from v$session group by machine

This query returns the session count on each machine:

MACHINE USERS machine1 16 machine2 17 machine3 15 machine4 14

Now you’d like to know the total number of users. You could manually summarize 16, 17, 15 and 14 to the total of 62. Or you could execute another query without grouping the “machine”. The best way would be an automated summary of the number of users in our actual query. It’s simple!

Just use the ROLLUP analytical function:

select machine, count(*) as users from v$session group by rollup (machine)

This ease use of the rollup analytical functions summarizes our users count. Now, an additional row in the query result set return the total users count of 62.

MACHINE USERS machine1 16 machine2 17 machine3 15 machine4 14 “total” . . . 62

Reference:

SELECT [column,] group function(column) . , GROUPING(expr) FROM table [WHERE condition] [GROUP BY [ROLLUP][CUBE] group by expression] [HAVING having expression ] [ORDER BY column];

When using mySql instead of Oracle, just use the “WITH ROLLUP” clause.


Update 2024

SQL-Abfrage in Oracle 🔗

Sie haben eine einfache SQL-Abfrage wie diese:

SELECT machine, COUNT(*) AS users
FROM v_session
GROUP BY machine;

Diese Abfrage gibt die Sitzungszahl auf jeder Maschine zurück.

Jetzt möchten Sie die Gesamtanzahl der Benutzer wissen. Sie könnten manuell zusammenfassen und zur Gesamtsumme kommen. Oder Sie könnten eine weitere Abfrage ohne Gruppierung der Maschine ausführen. Der beste Weg wäre jedoch eine automatisierte Zusammenfassung der Benutzeranzahl in unserer aktuellen Abfrage. Es ist einfach! Verwenden Sie einfach die ROLLUP-Analysefunktion.

SELECT machine, COUNT(*) AS users
FROM v_session
GROUP BY ROLLUP(machine);

Diese einfache Verwendung der ROLLUP-Analysefunktion fasst unsere Benutzeranzahl zusammen. Jetzt wird eine zusätzliche Zeile im Abfrageergebnis die Gesamtanzahl der Benutzer von MACHINE anzeigen.

Referenz:

SELECT column, GROUPING function(column), GROUPING(expr)
FROM table
WHERE condition
GROUP BY ROLLUP(CUBE) group by expression
HAVING having expression
ORDER BY column;

Wenn Sie anstelle von Oracle mySql verwenden, verwenden Sie einfach die WITH ROLLUP-Klausel.

Aktualisierung für das Jahr 2024 🔗

Im Jahr 2024 ist die Verwendung der ROLLUP-Funktion in Oracle nach wie vor eine effiziente Möglichkeit, um aggregierte Daten in SQL-Abfragen zu erhalten. Die Syntax hat sich nicht geändert, und sie bleibt ein nützliches Werkzeug, um die Gesamtanzahl von Benutzern oder anderen aggregierten Werten in Abfrageergebnissen anzuzeigen.

Die ROLLUP-Funktion wird nach wie vor häufig in Datenbankabfragen eingesetzt, um die Zusammenfassung von Daten auf verschiedenen Hierarchieebenen zu erleichtern. Durch die Verwendung dieser Funktion können Benutzer schnell Gesamtsummen und Teilergebnisse in ihren Abfrageergebnissen sehen, ohne separate Abfragen oder manuelle Berechnungen durchführen zu müssen.

Im Jahr 2024 gibt es keine wesentlichen Änderungen in Bezug auf die Verwendung von ROLLUP in Oracle SQL im Vergleich zu den vorherigen Jahren. Es bleibt ein leistungsfähiges Werkzeug für die Datenanalyse in Datenbanken.

Insgesamt hat sich die Verwendung der ROLLUP-Funktion in Oracle SQL von 2011 bis 2024 als konsistent und effektiv erwiesen. Es ist weiterhin eine empfohlene Methode, um aggregierte Daten in SQL-Abfragen zu summarisieren und Gesamtsummen einfach zu erhalten.