Jump to content

Recommended Posts

Posted

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 😛 )

Posted

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 😛

Posted

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 😉

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.