Bruno Posted November 2, 2005 at 07:52 PM Report #6226 Posted November 2, 2005 at 07:52 PM Tenho uma tabela com as notas de uma cadeira de cada aluno... algo do tipo: Nome | Nota ------------ Bruno | 15 Joana | 17 Miguel| 15 Agora se quisesse saber qts alunos tiveram cada nota bastava: select nota, count(nome) from ... group by nota Certo? (acho q estou a ver bem) E isto daria algo do tipo Nota | Nº ----------- 15 | 2 17 | 1 Mas... a query é suposto ser esquesita :oops: e portanto em vez de dar duas linhas devia dar era 2 colunas... isto é: 15 | 17 -------- 2 | 1 Alguem sabe fazer isto? 😛 (se alguem me disser a ideia em SQL normal eu penso q depois safo-me 😛 )
milks Posted November 3, 2005 at 01:24 AM Report #6246 Posted November 3, 2005 at 01:24 AM Experimenta esta: SELECT SUM(IF(nota=1,1,0)) AS '1', SUM(IF(nota=2,1,0)) AS '2', SUM(IF(nota=3,1,0)) AS '3', SUM(IF(nota=4,1,0)) AS '4', SUM(IF(nota=5,1,0)) AS '5', SUM(IF(nota=6,1,0)) AS '6', SUM(IF(nota=7,1,0)) AS '7', SUM(IF(nota=8,1,0)) AS '8', SUM(IF(nota=9,1,0)) AS '9', SUM(IF(nota=10,1,0)) AS '10', SUM(IF(nota=11,1,0)) AS '11', SUM(IF(nota=12,1,0)) AS '12', SUM(IF(nota=13,1,0)) AS '13', SUM(IF(nota=14,1,0)) AS '14', SUM(IF(nota=15,1,0)) AS '15', SUM(IF(nota=16,1,0)) AS '16', SUM(IF(nota=17,1,0)) AS '17', SUM(IF(nota=18,1,0)) AS '18', SUM(IF(nota=19,1,0)) AS '19', SUM(IF(nota=20,1,0)) AS '20' FROM notas; É um pouco grande, e foi feita em MySQL 4.x.x, como no 5 já há stored procedures deve existir uma forma de fazer o mesmo mas mais simples.(mais aqui: http://www.futhark.ch/mysql/106.html e http://dev.mysql.com/tech-resources/articles/wizard/index.html ) Explicando o que a query faz: Passa por todos os registos e se nota = x, soma 1 senão, soma 0. Outra coisa interessante, se tivesses bastantes valores, por exemplo, se a nota fosse de 1 a 100, estar a escrever à mão dava trabalho 😛 , o melhor é por o MySQL a escrever por ti: SELECT CONCAT(', SUM(IF(nota = ',nota,', 1,0)) AS `',nota,'`') FROM notas GROUP BY nota; devolve , SUM(IF(nota = 15, 1,0)) AS `15` , SUM(IF(nota = 17, 1,0)) AS `17` Depois era só "copy & paste" 😛 O inconveniente deste metodo é que como só existem as notas 15 e 17, só estas é que são apresentadas, mas pode ser útil noutros casos e (para quem não leu o 2º link) achei por bem colocar aqui. ps: já faz falta o syntax highlighting no forum 😛
Bruno Posted November 3, 2005 at 06:38 PM Author Report #6262 Posted November 3, 2005 at 06:38 PM Obrigado pela resposta 😛 Só irei testar no fds, depois darei feedback... e já agora estou a usar o MS SQL Server 😛 Um abraço [[]]
Bruno Posted November 7, 2005 at 06:32 PM Author Report #6443 Posted November 7, 2005 at 06:32 PM Não funcionou... ele n curtiu o IF dentro do SUM/SELECT 😉 De qq modo ja está solucionado o problema 😄
mrodrigues Posted November 7, 2005 at 09:09 PM Report #6448 Posted November 7, 2005 at 09:09 PM Experimenta o Case. Mas já agora, qual é o sgbd?
milks Posted November 7, 2005 at 09:42 PM Report #6452 Posted November 7, 2005 at 09:42 PM O que ele está a usar é o MSSQL, eu não tinha a certeza se o IF dava em MSSQL, sabia que podia usar CASE, mas ficava uma query ainda mais longa, em qualquer dos casos pelo que ele diz o problema já está resolvido 😉
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now