I did the generic SQL:
select
'Total Estudantes' as Resultado, count(*) as Total
from
ESTUDANTES_IDENTIFICACAO
union
select
CONCAT('Sexo ', b.sexo), count(*)
from
ESTUDANTES_IDENTIFICACAO a
inner join SEXO_IDENTIFICACAO b on b.id = a.sexo_id
group by
b.sexo
union
select
CONCAT('Situacao Final ', IFNULL(b.situacao_final_id, "ND")), count(*)
from
TURMAS_HAS_ESTUDANTES a
left join SITUACAO_FINAL b on b.id = a.situacao_final
group by
b.situacao_final_id
Practical example
link
Final Score
| Resultado | Total |
|-------------------------------|-------|
| Total Estudantes | 15 |
| Sexo Feminino | 6 |
| Sexo Masculino | 9 |
| Situacao Final ND | 10 |
| Situacao Final Reclassificado | 1 |
| Situacao Final Remanejado | 2 |
| Situacao Final Transferido | 2 |
Practical Example Filtering Class
link
Result Filtering Class
| Resultado | Total |
|-------------------------------|-------|
| Total Estudantes | 6 |
| Sexo Feminino | 2 |
| Sexo Masculino | 4 |
| Situacao Final ND | 2 |
| Situacao Final Reclassificado | 1 |
| Situacao Final Remanejado | 1 |
| Situacao Final Transferido | 2 |
Structure data
create table ESTUDANTES_IDENTIFICACAO (
id int not null,
nome varchar(50),
sexo_id int,
deficiancia varchar(50)
);
insert into ESTUDANTES_IDENTIFICACAO values (1, 'nome_1', 1, null);
insert into ESTUDANTES_IDENTIFICACAO values (2, 'nome_2', 1, null);
insert into ESTUDANTES_IDENTIFICACAO values (3, 'nome_3', 2, null);
insert into ESTUDANTES_IDENTIFICACAO values (4, 'nome_4', 1, null);
insert into ESTUDANTES_IDENTIFICACAO values (5, 'nome_5', 2, null);
insert into ESTUDANTES_IDENTIFICACAO values (6, 'nome_6', 1, null);
insert into ESTUDANTES_IDENTIFICACAO values (7, 'nome_7', 1, null);
insert into ESTUDANTES_IDENTIFICACAO values (8, 'nome_8', 2, null);
insert into ESTUDANTES_IDENTIFICACAO values (9, 'nome_9', 1, null);
insert into ESTUDANTES_IDENTIFICACAO values (10, 'nome_10', 2, null);
insert into ESTUDANTES_IDENTIFICACAO values (11, 'nome_11', 2, null);
insert into ESTUDANTES_IDENTIFICACAO values (12, 'nome_12', 1, null);
insert into ESTUDANTES_IDENTIFICACAO values (13, 'nome_13', 1, null);
insert into ESTUDANTES_IDENTIFICACAO values (14, 'nome_14', 2, null);
insert into ESTUDANTES_IDENTIFICACAO values (15, 'nome_15', 1, null);
create table SEXO_IDENTIFICACAO (
id int not null,
sexo varchar(50)
);
insert into SEXO_IDENTIFICACAO values (1, 'Masculino');
insert into SEXO_IDENTIFICACAO values (2, 'Feminino');
create table TURMAS_HAS_ESTUDANTES (
id int not null,
turma_id int,
estudante_id int,
situacao_final int
);
insert into TURMAS_HAS_ESTUDANTES values (1, 492, 1, null);
insert into TURMAS_HAS_ESTUDANTES values (2, 492, 2, 3);
insert into TURMAS_HAS_ESTUDANTES values (3, 492, 3, null);
insert into TURMAS_HAS_ESTUDANTES values (4, 492, 4, 5);
insert into TURMAS_HAS_ESTUDANTES values (5, 492, 5, 6);
insert into TURMAS_HAS_ESTUDANTES values (6, 492, 6, 5);
insert into TURMAS_HAS_ESTUDANTES values (7, 493, 7, null);
insert into TURMAS_HAS_ESTUDANTES values (8, 493, 8, null);
insert into TURMAS_HAS_ESTUDANTES values (9, 493, 9, 3);
insert into TURMAS_HAS_ESTUDANTES values (10, 493, 10, null);
insert into TURMAS_HAS_ESTUDANTES values (11, 493, 11, null);
insert into TURMAS_HAS_ESTUDANTES values (12, 493, 12, null);
insert into TURMAS_HAS_ESTUDANTES values (13, 494, 13, null);
insert into TURMAS_HAS_ESTUDANTES values (14, 494, 14, null);
insert into TURMAS_HAS_ESTUDANTES values (15, 494, 15, null);
create table SITUACAO_FINAL (
id int not null,
situacao_final_id varchar(50)
);
insert into SITUACAO_FINAL values (3, 'Remanejado');
insert into SITUACAO_FINAL values (5, 'Transferido');
insert into SITUACAO_FINAL values (6, 'Reclassificado');
create table TURMAS_IDENTIFICACAO (
id int not null,
turma_id int
);
insert into TURMAS_IDENTIFICACAO values (1, 492);
insert into TURMAS_IDENTIFICACAO values (2, 493);
insert into TURMAS_IDENTIFICACAO values (3, 494);
Update (2/28/2018 9:30 PM)
The author asked for the separation of the data by final situation. Practical example put here: link
I thought of almost every possibility: D
New SQL
-- Total geral
select
'Total Estudantes' as Resultado, count(*) as Total
from
ESTUDANTES_IDENTIFICACAO a
inner join TURMAS_HAS_ESTUDANTES b on b.estudante_id = a.id
where
b.turma_id = 492
union
-- Busca total por situação final
select
case
when b.situacao_final is null then 'Total Estudantes Sem Situação Final'
else 'Total Estudantes Com Situação Final'
end as Resultado, count(*) as Total
from
ESTUDANTES_IDENTIFICACAO a
inner join TURMAS_HAS_ESTUDANTES b on b.estudante_id = a.id
where
b.turma_id = 492
group by
case
when b.situacao_final is null then 'Total Estudantes Sem Situação Final'
else 'Total Estudantes Com Situação Final'
end
union
-- Busca por sexo
select
CONCAT('Sexo ', b.sexo), count(*)
from
ESTUDANTES_IDENTIFICACAO a
inner join SEXO_IDENTIFICACAO b on b.id = a.sexo_id
inner join TURMAS_HAS_ESTUDANTES c on c.estudante_id = a.id
where
c.turma_id = 492
group by
b.sexo
union
-- Busca total por situação final e sexo
select
case
when c.situacao_final is null then CONCAT('Sexo ', b.sexo,' sem Situação Final')
else CONCAT('Sexo ', b.sexo, ' com Situação Final')
end as Resultado, count(*) as Total
from
ESTUDANTES_IDENTIFICACAO a
inner join SEXO_IDENTIFICACAO b on b.id = a.sexo_id
inner join TURMAS_HAS_ESTUDANTES c on c.estudante_id = a.id
where
c.turma_id = 492
group by
case
when c.situacao_final is null then CONCAT('Sexo ', b.sexo,' sem Situação Final')
else CONCAT('Sexo ', b.sexo, ' com Situação Final')
end
union
-- Sexo e descricao da situação final
select
CONCAT('Sexo ', b.sexo, ' com situacao ', IFNULL(d.situacao_final_id, "ND")), count(*)
from
ESTUDANTES_IDENTIFICACAO a
inner join SEXO_IDENTIFICACAO b on b.id = a.sexo_id
inner join TURMAS_HAS_ESTUDANTES c on c.estudante_id = a.id
left join SITUACAO_FINAL d on d.id = c.situacao_final
where
c.turma_id = 492
group by
CONCAT('Sexo ', b.sexo, ' com situacao ', IFNULL(d.situacao_final_id, "ND"))
union
select
CONCAT('Situacao Final ', IFNULL(b.situacao_final_id, "ND")), count(*)
from
TURMAS_HAS_ESTUDANTES a
left join SITUACAO_FINAL b on b.id = a.situacao_final
where
a.turma_id = 492
group by
b.situacao_final_id