Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Tenho uma tabela que gravo o idioma e a fluência do candidato. Por ex:
Candidato Idioma Fluência
1 Inglês 1
2 Espanhol 3
3 Francês 2
Quero saber quantos candidatos tem inglês, espanhol e francês básico, avançado e intermediário.
Para isso, eu faço o seguinte:
select Idioma,
COUNT(distinct(Candidato)) as Total,
count(CASE WHEN Fluência = 1 THEN 'Básico' ELSE NULL END) as Básico,
count(CASE WHEN Fluência = 2 THEN 'Intermediário' ELSE NULL END) as Intermediário,
count(CASE WHEN Fluência = 3 THEN 'Avançado' ELSE NULL END) as Avançado
from tabela
group by Idioma
O resultado é:
Idioma Total Básico Intermediário Avançado
Inglês 2 2 0 0
Espanhol 3 1 1 1
Francês 1 0 1 0
Porém, se tiver um registro duplicado, ou seja, de dois candidatos, se um aparecer 3 vezes e outro 2 vezes na tabela com o Inglês básico, o resultado vai ser assim:
Idioma Total Básico Intermediário Avançado
Inglês 2 5 0 0
Espanhol 3 1 1 1
Francês 1 0 1 0
Como eu faço nesse caso para contar somente os registros únicos?Olá!
Acredito que essa não seria a melhor prática, mas tente isso:
select Idioma,
COUNT(distinct Candidato) as Total
, IIF(Fluência = '1', COUNT(distinct Candidato ), 0) as Básico
, IIF(Fluência = '2', COUNT(distinct Candidato ), 0) as Intermediário
, IIF(Fluência = '3', COUNT(distinct Candidato ), 0) as Avançado
from tabela
group by Idioma
Não entendi a necessidade do DISTINCT dentro das contagens, existe registro de aluno em um curso com mais de um nível?
A duplicidade é um erro ou é normal ?
Sendo normal algo que identifica de forma única ?