ROWS & RANGE Criterion
Parte de la sección Fundamentos del Journey de SQL de Coddy — lección 69 de 72.
Hasta ahora, no podíamos ser flexibles respecto a elegir cuántas filas antes o después tomar en cuenta. Ahora es posible con los criterios ROWS & RANGE. Para usarlos, escribimos:
OVER (ROWS BETWEEN --START-- AND --END--)
OVER (RANGE BETWEEN --START-- AND --END--)
Y podemos especificar las siguientes opciones:
CURRENT ROW- la fila actualn PRECEDING- filas antes de la fila actualn FOLLOWING- filas después de la fila actual
La diferencia entre ROWS & RANGE es que el criterio ROWS no se preocupa por los valores, solo por las posiciones, mientras que RANGE define la ventana en términos de rangos de valores en lugar de posiciones de fila.
Para RANGE debemos especificar ORDER BY --column_name-- porque si no, no sabría cómo elegir la ventana.
Por ejemplo:
ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWINGAquí crea una ventana que incluye la fila actual, la fila anterior y la fila posterior.
RANGE BETWEEN 1 PRECEDING AND 1 FOLLOWING ORDER BY levelsAquí crea una ventana que incluye para cada nivel (ordenado en orden ascendente) el nivel actual, uno antes de él y uno después de él. Si el nivel actual es 5, entonces incluirá los niveles 4, 5 y 6.
Nota: El uso de RANGE BETWEEN podría resultar en más filas incluidas en su ventana, porque incluye todas las filas que comparten los mismos valores que aquellas en el rango, mientras que ROWS BETWEEN siempre incluirá el mismo número de filas (siempre y cuando estén disponibles en el conjunto de datos).
También RANGE no soporta columnas de fecha.
Aquí hay un ejemplo simple para ilustrar ROWS vs RANGE:
Usando ROWS:
SELECT employee_name, salary,
AVG(salary) OVER (
ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING
) as avg_salary_rowsUsando RANGE:
SELECT employee_name, salary,
AVG(salary) OVER (
ORDER BY salary
RANGE BETWEEN 1000 PRECEDING AND 1000 FOLLOWING
) as avg_salary_rangeDesafío
FácilTablas y columnas disponibles:
<strong>newspapers</strong>:<strong>date</strong>,<strong>num_newspapers</strong>
Para este desafío, tenemos periódicos para producción. Nos gustaría saber el promedio de periódicos que se imprimieron dos días antes de la fila actual y un día después. También, nos gustaría saber la diferencia entre el máximo y el mínimo número de periódicos impresos desde la fecha actual y los tres días anteriores. Llama a estas columnas avg_newspapers y diff_newspapers respectivamente.
Hoja de referencia
Usa ROWS y RANGE para definir marcos de ventana flexibles en funciones de ventana:
ROWS - define la ventana por posiciones de fila:
OVER (ROWS BETWEEN --START-- AND --END--)RANGE - define la ventana por rangos de valores (requiere ORDER BY):
OVER (ORDER BY column_name RANGE BETWEEN --START-- AND --END--)Opciones de límites de ventana:
CURRENT ROW- la fila actualn PRECEDING- n filas/valores antes de la actualn FOLLOWING- n filas/valores después de la actual
Ejemplos:
-- ROWS: incluye la fila actual + 1 antes + 1 después (por posición)
ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING
-- RANGE: incluye valores dentro del rango (por valor)
ORDER BY levels
RANGE BETWEEN 1 PRECEDING AND 1 FOLLOWINGDiferencias clave:
ROWS- basado en posiciones de fila, siempre el mismo número de filasRANGE- basado en valores, puede incluir más filas con valores igualesRANGEno soporta columnas de fecha
Pruébalo tú mismo
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Fundamentos
4More Keywords
The IN keywordThe BETWEEN keywordThe LIKE keywordThe AS keywordRecap - Cellphone Models2Conditions
Conditions BasicsThe AND keywordThe OR keywordThe NOT keywordMultiple Conditions CombinedParenthesisBooleans5Arithmetic Operations
Mathematical OperatorsMathematical ColumnsThe Modulo OperationThe ROUND() Function3Specific Return Format
Null valuesSort Results Part 1Sort Results Part 2Recap - Cyber Security FirmLimit number of recordsRecap - Vehicle Factory6Intro Challenges
Recap - Parliamentary ElectionRecap - Police Criminal ArrestRecap - Bar Beverage ContainerRecap - Engineer new columns9Multiple tables
Basic Join Part 1Basic Join Part 2Recap - JoinSelf joinRecap - Self JoinUnionSimplify queries, WITH keywordRecap - With QueriesRecap - Real Estate Contractor12Window Functions part 2
RANK & DENSE_RANK FunctionsRecap - RANK & DENSE_RANKNTILE FunctionAggregation FunctionsROWS & RANGE Criterion