Podemos tomar un ejemplo simple.
Considere una tabla TableA
con los siguientes valores:
id firstname lastname Mark
-------------------------------------------------------------------
1 arun prasanth 40
2 ann antony 45
3 sruthy abc 41
6 new abc 47
1 arun prasanth 45
1 arun prasanth 49
2 ann antony 49
GROUP BY
La cláusula SQL GROUP BY se puede usar en una instrucción SELECT para recopilar datos en varios registros y agrupar los resultados en una o más columnas.
En palabras más simples, la instrucción GROUP BY se usa junto con las funciones agregadas para agrupar el conjunto de resultados por una o más columnas.
Sintaxis:
SELECT expression1, expression2, ... expression_n,
aggregate_function (aggregate_expression)
FROM tables
WHERE conditions
GROUP BY expression1, expression2, ... expression_n;
Podemos aplicar GROUP BY
en nuestra tabla:
select SUM(Mark)marksum,firstname from TableA
group by id,firstName
Resultados:
marksum firstname
----------------
94 ann
134 arun
47 new
41 sruthy
En nuestra tabla real tenemos 7 filas y cuando aplicamos GROUP BY id
, el servidor agrupa los resultados en función de id
:
En palabras simples:
aquí GROUP BY
normalmente reduce el número de filas devueltas al enrollarlas y calcular Sum()
para cada fila.
PARTITION BY
Antes de ir a PARTITION BY, veamos la OVER
cláusula:
Según la definición de MSDN:
La cláusula OVER define una ventana o un conjunto de filas especificado por el usuario dentro de un conjunto de resultados de consulta. Una función de ventana luego calcula un valor para cada fila en la ventana. Puede usar la cláusula OVER con funciones para calcular valores agregados como promedios móviles, agregados acumulativos, totales acumulados o una N superior por resultados de grupo.
PARTITION BY no reducirá el número de filas devueltas.
Podemos aplicar PARTITION BY en nuestra tabla de ejemplo:
SELECT SUM(Mark) OVER (PARTITION BY id) AS marksum, firstname FROM TableA
Resultado:
marksum firstname
-------------------
134 arun
134 arun
134 arun
94 ann
94 ann
41 sruthy
47 new
Mire los resultados: dividirá las filas y devolverá todas las filas, a diferencia de GROUP BY.