Files
eth-summaries/semester4/dmdb/parts/01_sql/03_query-language/03_aggregation.tex
T
2026-06-23 15:51:58 +02:00

42 lines
1.8 KiB
TeX

\newpage
\subsubsection{Aggregations, Grouping, Sorting}
\paragraph{Aggregations}
\sql\ supports (at least) the aggregation functions \texttt{SUM}, \texttt{MIN}, \texttt{MAX}, \texttt{AVG}, \texttt{COUNT},
whose output should be evident.
Please note that you cannot use the aggregation functions and still output another column,
as they produce a single value.
For each of the functions, you can optionally specify \texttt{DISTINCT}.
We typically want to specify an \texttt{AS} clause, to make the output nicer to read
\paragraph{Grouping}
Grouping is used to, well, group together the outputs on a column.
Using SQL, this is achieved using the \texttt{GROUP BY} clause.
We specify the columns on which the grouping should occur.
\hl{\textbf{\textit{IMPORTANT}}} We can only use aggregates and columns appearing in the \texttt{GROUP BY} clause in the \texttt{SELECT} clause.
Using a \texttt{JOIN} function, it is of course then possible to go back retrieve the other columns.
To apply filtering on the columns, the \texttt{HAVING} clause can be used.
It applies a comparison to a grouping column or an aggregate as specified in the \texttt{SELECT} clause:
\mint{sql}|SELECT COUNT(name) as cnt FROM Students GROUP BY Department HAVING cnt > 1;|
\paragraph{Sorting}
We can sort the output of any query using the \texttt{ORDER BY column DIRECTION} clause, where \texttt{DIRECTION} is to be replaced with \texttt{ASC} or \texttt{DESC}:
\mint{sql}|SELECT name FROM Students ORDER BY name DESC;|
\paragraph{Limit}
We can limit the number of columns to return using the \texttt{LIMIT} clause. Example:
\mint{sql}|SELECT * FROM Exams LIMIT 10;|
\paragraph{Example}
Below some examples of \sql\ Queries using grouping, aggregations, sorting and grouping
\inputcodewithfilename{sql}{}{code/sql/aggregations.sql}