NTILE para criação de faixas
Divida linhas em quartis e faixas de percentis.
NTILE para criação de faixas é uma aula grátis de SQL Interview Prep no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de SQL Interview Prep, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de SQL Interview Prep inclui 4 aulas no total.
Quando você precisa de faixas de mesmo tamanho
Os entrevistadores perguntam: "Divida os clientes em quatro grupos de gastos iguais," ou "Em qual decil está cada linha?" A ferramenta é NTILE.
NTILE(n) distribui as linhas ordenadas em n faixas da maneira mais uniforme possível e rotula cada linha com o número da sua faixa, de 1 a n. Esta lição aborda como ele divide as linhas, como trata quantidades desiguais e em que difere da classificação.
Sintaxe básica de NTILE
NTILE(4) aplicado a linhas ordenadas por um valor produz quartis. Como todas as funções de janela, ele precisa de uma cláusula OVER; o ORDER BY interno decide quais linhas ficam nas faixas inferiores e quais ficam nas superiores.
Ordenar em sentido crescente coloca os menores valores na faixa 1; ordenar em sentido decrescente inverte essa ordem.
SELECT
customer_id,
total_spend,
NTILE(4) OVER (ORDER BY total_spend) AS spend_quartile
FROM customers;Como NTILE distribui as linhas
Com 12 linhas e NTILE(4), cada faixa recebe exatamente 12 / 4 = 3 linhas. A faixa 1 contém os 3 menores valores, e a faixa 4, os 3 maiores.
A ideia principal é que NTILE divide pela quantidade de linhas, não pelos intervalos de valores. Duas faixas podem abranger intervalos de valores muito diferentes, desde que contenham a mesma quantidade de linhas.
Divisão desigual
O que acontece quando a divisão não é exata? Com 10 linhas e NTILE(4), 10 / 4 = 2, com resto 2. NTILE dá as linhas extras às faixas iniciais.
- Faixa 1: 3 linhas
- Faixa 2: 3 linhas
- Faixa 3: 2 linhas
- Faixa 4: 2 linhas
Assim, os tamanhos das faixas diferem no máximo em uma linha, e as faixas maiores vêm primeiro. Essa regra exata é um detalhe muito cobrado em entrevistas.
NTILE ignora empates entre valores
Armadilha importante: NTILE não mantém valores iguais na mesma faixa. Ele preenche por posição, portanto duas linhas com total_spend idêntico podem cair em faixas diferentes exclusivamente com base na ordem das linhas.
Se o negócio exigir que valores iguais pertençam ao mesmo nível, NTILE é a ferramenta errada; será necessária uma abordagem baseada em valores. Os entrevistadores inserem essa armadilha de propósito.
Decis e percentis
A quantidade de faixas é simplesmente o número informado. NTILE(10) fornece decis, e NTILE(100) fornece faixas de percentil. É assim que os analistas segmentam usuários em níveis de desempenho ou faixas de risco.
A saída é o número da faixa; portanto, um valor na faixa 9 de NTILE(10) está no segundo decil mais alto.
SELECT
user_id,
score,
NTILE(10) OVER (ORDER BY score DESC) AS decile
FROM leaderboard;Faixas por partição
Adicione PARTITION BY para criar faixas de forma independente dentro de cada grupo, por exemplo, quartis de gastos por região. Cada região reinicia na faixa 1.
Isso responde a perguntas como "clientes do quartil superior dentro de cada região", nas quais uma região com gastos gerais baixos ainda tem sua própria faixa 4.
SELECT
region,
customer_id,
total_spend,
NTILE(4) OVER (
PARTITION BY region
ORDER BY total_spend DESC
) AS regional_quartile
FROM customers;Filtrando um nível específico
Você não pode colocar NTILE(...) diretamente em uma cláusula WHERE; as funções de janela são calculadas depois de WHERE. Envolva a consulta em uma CTE ou subconsulta e depois filtre pela coluna da faixa.
Esse padrão, "mostre o quartil superior dos clientes que mais gastam", é a forma mais comum de NTILE aparecer em uma resposta real.
WITH q AS (
SELECT customer_id, total_spend,
NTILE(4) OVER (ORDER BY total_spend DESC) AS quartile
FROM customers
)
SELECT customer_id, total_spend
FROM q
WHERE quartile = 1;NTILE versus percentis baseados em valores
NTILE cria faixas com quantidades iguais de linhas. Se, em vez disso, você precisar de um percentil estatístico verdadeiro (o valor no percentil 90), use PERCENTILE_CONT ou PERCENTILE_DISC.
- NTILE(100): em qual faixa de percentil uma linha se encontra, pela posição na classificação.
- PERCENTILE_CONT(0.9): o valor real no percentil 90.
Conhecer essa distinção diferencia uma resposta confiante de um palpite.
Quando ORDER BY importa
NTILE exige um ORDER BY dentro de OVER; sem uma ordem definida, as faixas não têm significado. A direção determina qual extremidade é a faixa 1.
Se os empates tornarem a atribuição ambígua e a faixa exata de uma linha no limite for importante, adicione uma coluna de desempate à ordenação para obter resultados determinísticos e reproduzíveis.
Dando nomes às faixas
Números brutos de faixas (1, 2, 3, 4) raramente são o resultado final. Os analistas geralmente os mapeiam para rótulos de negócio como Baixo, Médio, Alto e Topo usando uma expressão CASE sobre o resultado de NTILE.
Calcule NTILE em uma CTE e depois converta o número na consulta externa. Isso mantém a lógica da janela limpa e deixa a apresentação da saída pronta para uso.
WITH q AS (
SELECT customer_id, total_spend,
NTILE(4) OVER (ORDER BY total_spend) AS bucket
FROM customers
)
SELECT customer_id, total_spend,
CASE bucket
WHEN 1 THEN 'Low'
WHEN 2 THEN 'Medium'
WHEN 3 THEN 'High'
WHEN 4 THEN 'Top'
END AS spend_tier
FROM q;Verificação rápida
Teste a regra da distribuição desigual.
Recapitulação
NTILE distribui linhas ordenadas em faixas com a mesma quantidade:
NTILE(n)rotula as linhas de 1 a n;NTILE(4)= quartis,NTILE(10)= decis.- Ele divide pela quantidade de linhas, não pelo intervalo de valores, e dá as linhas extras às faixas iniciais.
- Não mantém valores empatados juntos e não pode ser colocado diretamente em
WHERE. - Para obter um valor de percentil verdadeiro, use
PERCENTILE_CONT.
Em seguida: obtenha valores de limite com FIRST_VALUE, LAST_VALUE e os limites da moldura.
Perguntas Frequentes
A aula “NTILE para criação de faixas” é grátis?
Sim — o texto completo de “NTILE para criação de faixas” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de SQL Interview Prep, atualize para CoddyKit PRO. O curso de SQL Interview Prep inclui 4 aulas no total.
O que vou aprender em “NTILE para criação de faixas”?
Divida linhas em quartis e faixas de percentis. Você pratica SQL Interview Prep com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar SQL Interview Prep?
Nenhuma experiência prévia é necessária. SQL Interview Prep no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.
Quanto tempo leva a aula “NTILE para criação de faixas”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de SQL Interview Prep?
Sim. Cada aula de SQL Interview Prep inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- LAG e LEAD para linhas adjacentes
- Variação entre períodos
- NTILE para criação de faixas
- FIRST_VALUE, LAST_VALUE e limites da moldura