Agrupar resultados do Select por faixas e contá-los
7 respostasResolvido
sql
E
Elimar_Vieira
Pessoal estou com um probleminha. Tenho uma tabela com dados sobre MW (massa molecular) e PI de umas proteínas, preciso contar quantas proteínas estão em determinados intervalos, como pI entre 3 e 3,99, 4 e 4,99, sucessivamente até 10, e dentro dessa classificação contar os que tem mw menor que 20000, entre 20000 e 40000, e sucessivamente até maior que 80000. O resultado seria uma tabela como mostrada abaixo:
Já encontrei algumas coisas mas não deu certo, queria ajuda de vocês.
Como está a estrutura das suas tabelas?
Sem isso fico difícil ajudar.
O que foi que já encontrou?
E
Elimar_Vieira
Só utilizo uma tabela, esta possui o id da proteína o PI e a MW.
Eu encontrei um código que quase resolve meu problema, mas ainda não deu certo, acabei esquecendo de colocar.
selectcasewhen"MW"<20000then'1 - menor que 20'when"MW"between20000and39999then'2 - de 20 a 40'when"MW"between40000and59999then'3 - de 40 a 60'when"MW"between60000and80000then'4 - de 60 a 80'when"MW">80000then'5 - maior que 80'endasfaixa,count(*)astotalfromproteinas.dadosWHERE"pI"BETWEEN3AND3.999groupby"faixa"orderby"faixa";
Código apenas para PI entre 3 e 3,999, para os outros basta apenas mudar o final. Eu estava querendo buscar cada faixa de PI separadamente e ir colocando em uma outra tabela e no final ter a tabela que eu mostrei no começo, mas isso seria só quando eu resolver o problema desse código, pois ele me dá o que quero, só que quando não há proteínas no intervalo, ele não mostra 0, apenas não mostra nada, e eu preciso do 0.
E
Elimar_Vieira
Eis a tabela com os dados (as colunas são spotid, pi, mw)
Muito bom seu código! Porém, aqui não reconheceu o ‘\t’ nem o chr( ), mas de antemão já foi de grande ajuda! Vou ver se consigo arrumar essa última parte! Valeu mesmo!