Solucionado (ver solução)
Solucionado
(ver solução)
7
respostas

Dúvida no Ex. 3 da Aula 5 - Sub-queries

Olá!

Neste exercício a coluna onde fizemos 'matrícula / matrículas totais' retornou 0. Acredito que tenha sido pois os números seriam pequenos, 0.28 e 0.14. Existe alguma forma para que a consulta retorne o número, mesmo ele sendo pequeno, como no exercício?

select c.nome, 
    count(m.id) as 'Quantidade de matriculas por curso', 
    count(m.id) / (select count(m1.id) from matricula m1) as 'matrículas / matrículas totais'
from curso c
join matricula m on m.curso_id = c.id
group by c.nome
7 respostas

Daniel,

estranho , pois aparece os resultado sim ,

fiz o teste com seu código e apareceu o resultado :

mysql> select c.nome,
    ->     count(m.id) as 'Quantidade de matriculas por curso',
    ->     count(m.id) / (select count(m1.id) from matricula m1) as 'matrículas
/ matrículas totais'
    -> from curso c
    -> join matricula m on m.curso_id = c.id
    -> group by c.nome;
+---------------------------------+------------------------------------+--------
------------------------+
| nome                            | Quantidade de matriculas por curso | matrícu
las / matrículas totais |
+---------------------------------+------------------------------------+--------
------------------------+
| Desenvolvimento web com VRaptor |                                  1 |
                 0.2000 |
| PHP e MySql                     |                                  1 |
                 0.2000 |
| Scrum e métodos ágeis           |                                  1 |
                 0.2000 |
| SQL e banco de dados            |                                  2 |
                 0.4000 |
+---------------------------------+------------------------------------+--------
------------------------+
4 rows in set (0.19 sec)

mysql>

Muito estranho mesmo. O meu aparece apenas 0, por isso comentei que acreditava que fosse algo normal e que tivesse um método diferente para mostrar números decimais.

C# e orientação a objetos    4    0
Desenvolvimento mobile com Android    2    0
Desenvolvimento web com VRaptor    2    0
Scrum e métodos ágeis    2    0
SQL e banco de dados    4    0

Daniel,

você está fazendo no prompt ou está utilizando algum programa ?

Assim como foi instruído no incio do curso e como o professor faz os exercícios, estou usando o SQL Server.

solução!

Daniel,

Desculpa , não percebi que era sql server e acabei fazendo no mySQL .

No SQL server fiz o teste e realmente dá zero na resposta . porém percebi que ele só pega o número inteiro .

fiz o testa ao contrario da questão e coloquei :

quantidade total de curso / quantidade de cada curso

segue a SQL :

select c.nome, 
    count(m.id) as 'Quantidade de matriculas por curso', 
   (select count(m1.id) from matricula m1) /count(m.id)
from curso c
join matricula m on m.curso_id = c.id
group by c.nome

e o resultado foi :

3
7
7
7
3

só inteiro , pois id é inteiro . então pensei comigo vou fazer um cast dessa nova coluna para decimal segue o sql :

select c.nome, 
    count(m.id) as 'Quantidade de matriculas por curso', 
    cast(((select count(m1.id) from matricula m1) /count(m.id)) as decimal(10,5))
from curso c
join matricula m on m.curso_id = c.id
group by c.nome

e o resultado foi :

3.00000
7.00000
7.00000
7.00000
3.00000

então ele aparecerá somente o valor inteiro , como no caso do exercicio o valor inteiro é 0 (zero) ele dará somente 0

espero ter ajudado

Não era bem o que queria, mas ajudou sim, já que não sabia sobre o cast. Porém nesse caso não me pareceu algo muito interessante de usar já que a inversão dos valores já resolveria o problema.

Use o cast desta forma, assim o resultado será o que você deseja:

select c.nome as Curso, count(m.id) as 'Quantidade de matrícula',
count(m.id)/cast((select count(id) from matricula) as numeric(10,2)) as 'Divisão'
from curso c join matricula m on m.curso_id = c.id group by c.nome;