Suponha que eu tenha uma tabela com uma coluna numérica (vamos chamá-la de "pontuação").
Eu gostaria de gerar uma tabela de contagens, que mostra quantas vezes as pontuações apareceram em cada intervalo.
Por exemplo:
faixa de pontuação | número de ocorrências ------------------------------------- 0-9 11 10-19 14 20-29 3 ... ...
Neste exemplo, havia 11 linhas com pontuações no intervalo de 0 a 9, 14 linhas com pontuações no intervalo de 10 a 19 e 3 linhas com pontuações no intervalo de 20 a 29.
Existe uma maneira fácil de configurar isso? O que você recomenda?
sql
sql-server
tsql
Hugh
fonte
fonte
Uma abordagem alternativa envolveria armazenar os intervalos em uma tabela, em vez de incorporá-los na consulta. Você terminaria com uma tabela, chamada de Ranges, que fica assim:
E uma consulta que se parece com isso:
Isso significa configurar uma tabela, mas seria fácil manter quando os intervalos desejados mudarem. Não é necessário alterar o código!
fonte
Vejo respostas aqui que não funcionarão na sintaxe do SQL Server. Eu usaria:
EDIT: veja comentários
fonte
No postgres (onde
||
está o operador de concatenação de cadeias):dá:
fonte
A resposta de James Curran foi a mais concisa na minha opinião, mas a saída não estava correta. Para o SQL Server, a instrução mais simples é a seguinte:
Isso pressupõe uma tabela temporária #Scores que eu usei para testá-la, apenas preenchi 100 linhas com número aleatório entre 0 e 99.
fonte
fonte
fonte
Isso permitirá que você não precise especificar intervalos e deve ser independente do servidor SQL. Math FTW!
fonte
Eu faria isso de forma um pouco diferente para que ele seja dimensionado sem ter que definir todos os casos:
Não testado, mas você entendeu ...
fonte
fonte
Certifique-se de usar uma palavra diferente de 'range' se você estiver no MySQL, ou você receberá um erro ao executar o exemplo acima.
fonte
Como a coluna que está sendo classificada em (
Range
) é uma sequência, a classificação por sequência / palavra é usada em vez da ordenação numérica.Desde que as strings tenham zeros para preencher os comprimentos dos números, a classificação ainda deve estar semanticamente correta:
Se o intervalo for misto, basta preencher um zero extra:
fonte
Experimentar
fonte
Talvez você esteja perguntando sobre como manter essas coisas acontecendo ...
Obviamente, você invocará uma varredura completa da tabela para as consultas e, se a tabela que contém as pontuações que precisam ser computadas (agregações) for grande, você poderá querer uma solução com melhor desempenho, poderá criar uma tabela secundária e usar regras, como
on insert
- você pode investigar.Mas nem todos os mecanismos RDBMS têm regras!
fonte