ROWS & RANGE Criterion
Parte da seção Fundamentos do Journey de SQL da Coddy — lição 69 de 72.
Até agora, não podemos ser flexíveis em relação à escolha de quantas linhas antes ou depois levar em conta. Agora é possível com os critérios ROWS & RANGE. Para usá-los, escrevemos:
OVER (ROWS BETWEEN --START-- AND --END--)
OVER (RANGE BETWEEN --START-- AND --END--)
E podemos especificar as seguintes opções:
CURRENT ROW- a linha atualn PRECEDING- linhas antes da linha atualn FOLLOWING- linhas após a linha atual
A diferença entre ROWS & RANGE é que o critério ROWS não considera os valores, apenas as posições, enquanto RANGE define a janela em termos de intervalos de valores em vez de posições de linhas.
Para RANGE devemos especificar ORDER BY --column_name--, porque, caso contrário, não saberia como escolher a janela.
Por exemplo:
ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWINGAqui, cria uma janela que inclui a linha atual, a linha anterior a ela e a linha posterior a ela.
RANGE BETWEEN 1 PRECEDING AND 1 FOLLOWING ORDER BY levelsAqui, cria-se uma janela que inclui, para cada nível (ordenado em ordem crescente), o nível atual, um nível antes dele e um nível depois dele. Se o nível atual for 5, então incluirá os níveis 4, 5 e 6.
Nota: O uso de RANGE BETWEEN pode resultar em mais linhas sendo incluídas na sua janela, porque inclui todas as linhas que compartilham os mesmos valores que aquelas no intervalo, enquanto ROWS BETWEEN sempre incluirá o mesmo número de linhas (contanto que estejam disponíveis no conjunto de dados).
Além disso, RANGE não suporta colunas de data.
Aqui está um exemplo simples 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_rangeDesafio
FácilTabelas e colunas disponíveis:
<strong>newspapers</strong>:<strong>date</strong>,<strong>num_newspapers</strong>
Para este desafio, temos jornais para produção. Gostaríamos de saber a média de jornais impressos dois dias antes da linha atual e um dia depois. Além disso, gostaríamos de saber a diferença entre o máximo e o mínimo número de jornais impressos a partir da data atual e de todos os três dias anteriores. Chame essas colunas de avg_newspapers e diff_newspapers, respectivamente.
Folha de consulta
Use ROWS e RANGE para definir frames de janela flexíveis em funções de janela:
ROWS - define a janela por posições de linhas:
OVER (ROWS BETWEEN --START-- AND --END--)RANGE - define a janela por intervalos de valores (requer ORDER BY):
OVER (ORDER BY column_name RANGE BETWEEN --START-- AND --END--)Opções de limites de janela:
CURRENT ROW- a linha atualn PRECEDING- n linhas/valores antes da atualn FOLLOWING- n linhas/valores após a atual
Exemplos:
-- ROWS: includes current row + 1 before + 1 after (by position)
ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING
-- RANGE: includes values within range (by value)
ORDER BY levels
RANGE BETWEEN 1 PRECEDING AND 1 FOLLOWINGPrincipais diferenças:
ROWS- baseado em posições de linhas, sempre o mesmo número de linhasRANGE- baseado em valores, pode incluir mais linhas com os mesmos valoresRANGEnão suporta colunas de data
Experimente você mesmo
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições 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