Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

FabiiChan

Selects

Recommended Posts

Estou com problemas em fazer 2 selects no SQl Server...

 

Construí um BD com as tabelas e chaves primárias/secundárias seguintes:

 

create database faculdade

 

-- Usando o banco

use faculdade

 

-- Criando tabelas

create table alunos

(ra int not null identity,nome varchar (100), cidade varchar (40))

create table professores

(codigoprofessor int not null identity, nome varchar (100), cidade varchar (40))

create table disciplinas

(codigodisciplina int not null identity, disciplina varchar (100), cargahoraria float)

create table turmas

(codigoturma int not null identity,codigodisciplina int,codigoprofessor int, ano int, diasemana varchar (40))

create table historico

(codigohistorico int not null identity,ra int,codigoprofessor int,codigodisciplina int,codigoturma int, semestre int, faltas int, nota float)

 

-- Inserindo chave primária

alter table alunos add constraint chavealuno primary key (ra)

alter table professores add constraint chaveprof primary key (codigoprofessor)

alter table disciplinas add constraint chavedisc primary key (codigodisciplina)

alter table turmas add constraint chaveturm primary key (codigoturma)

alter table historico add constraint chavehist primary key (codigohistorico)

 

-- Inserindo chave secundária

alter table turmas add constraint relturprof foreign key (codigoprofessor) references professores (codigoprofessor)

alter table turmas add constraint relturdisc foreign key (codigodisciplina) references disciplinas (codigodisciplina)

alter table historico add constraint relhistalun foreign key (ra) references alunos (ra)

alter table historico add constraint relhistprof foreign key (codigoprofessor) references professores(codigoprofessor)

alter table historico add constraint relhistdisc foreign key (codigodisciplina) references disciplinas (codigodisciplina)

alter table historico add constraint relhistturm foreign key (codigoturma) references turmas(codigoturma)

 

Preciso de um select que mostre a quantidade e nome das disciplinas de cada professor no ano de 2012, fiz o seguinte select que não está funcionando corretamente:

 

select count(codigodisciplina) as 'QtdDisciplinas' from historico

where ano = 2012 (select distinct d.disciplina as 'Nome da Disciplina', p.nome as 'Nome dos Professor' from historico h, disciplinas d, professores p

where h.codigodisciplina = d.codigodisciplina)

 

Ele retorna uma coisa bagunçada e confusa >.<'

 

E outro select que mostre a disciplina com maior média de notas:

 

select codigodisciplina as 'Código da Disciplina', AVG(nota) as 'Média' from historico

group by codigodisciplina

having avg(nota) > (select avg(nota) from historico)

 

Esta, ao invés de mostrar a com maior média, mostra as duas com maior média u.u'

 

 

Ajudem aê o/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha,

eu fiz deste modo:

 



-- Criando tabelas
declare @alunos table
(ra int not null identity,nome varchar (100), cidade varchar (40))
declare @professores  table 
(codigoprofessor int not null identity, nome varchar (100), cidade varchar (40))
declare @disciplinas table
(codigodisciplina int not null identity, disciplina varchar (100), cargahoraria float)
declare @turmas table
(codigoturma int not null identity,codigodisciplina int,codigoprofessor int, ano int, diasemana varchar (40))
declare @historico table
(codigohistorico int not null identity,ra int,codigoprofessor int,codigodisciplina int,codigoturma int, semestre int, faltas int, nota float)

/*
-- Inserindo chave primária
alter table @alunos add constraint chavealuno primary key (ra)
alter table @professores add constraint chaveprof primary key (codigoprofessor)
alter table @disciplinas add constraint chavedisc primary key (codigodisciplina)
alter table @turmas add constraint chaveturm primary key (codigoturma)
alter table @historico add constraint chavehist primary key (codigohistorico)

-- Inserindo chave secundária
alter table @turmas add constraint relturprof foreign key (codigoprofessor) references professores (codigoprofessor)
alter table @turmas add constraint relturdisc foreign key (codigodisciplina) references disciplinas (codigodisciplina)
alter table @historico add constraint relhistalun foreign key (ra) references alunos (ra)
alter table @historico add constraint relhistprof foreign key (codigoprofessor) references professores(codigoprofessor)
alter table @historico add constraint relhistdisc foreign key (codigodisciplina) references disciplinas (codigodisciplina)
alter table @historico add constraint relhistturm foreign key (codigoturma) references turmas(codigoturma)

*/

insert into @alunos values ('ALUNO_A', 'RIO DE JANEIRO')
insert into @alunos values ('ALUNO_B', 'BRASILIA')
insert into @alunos values ('ALUNO_C', 'GOIANIA')

INSERT INTO @professores VALUES ('PROFESSOR_A', 'SAO PAULO')
INSERT INTO @professores VALUES ('PROFESSOR_B', 'CURITIBA')
INSERT INTO @professores VALUES ('PROFESSOR_C', 'FLORIPA')

INSERT INTO @disciplinas VALUES ('PORTUGUES', 100)
INSERT INTO @disciplinas VALUES ('HISTORIA', 200)
INSERT INTO @disciplinas VALUES ('GEOGRAFIA', 80)

INSERT INTO @turmas (codigodisciplina, codigoprofessor , ano,diasemana ) VALUES (1,1,2012,'7 dias')
INSERT INTO @turmas (codigodisciplina, codigoprofessor , ano,diasemana ) VALUES (2,2,2012,'6 dias')
INSERT INTO @turmas (codigodisciplina, codigoprofessor , ano,diasemana ) VALUES (3,3,2010,'2 dias')

insert into @historico (codigoprofessor,codigodisciplina,codigoturma,semestre, faltas,nota, ra ) values (1,1,1,3,0,8,9)
insert into @historico (codigoprofessor,codigodisciplina,codigoturma,semestre, faltas,nota, ra ) values (2,2,2,1,8,7,9)
insert into @historico (codigoprofessor,codigodisciplina,codigoturma,semestre, faltas,nota, ra ) values (3,3,3,2,5,10,9)

-- mostre a quantidade e nome das disciplinas de cada professor no ano de 2012
select COUNT(*) as qtde, a.disciplina 
from @disciplinas a inner join @turmas b 
on a.codigodisciplina = b.codigodisciplina 
where b.ano = 2012
group by a.disciplina

-- mostre a disciplina com maior média de notas
select a.disciplina, AVG(b.nota) as media
from @disciplinas a inner join @historico b 
		on a.codigodisciplina = b.codigodisciplina 
group by a.disciplina

 

Veja se o resultado lhe ajuda

 

Abçs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigada, mas só uma coisa, o primeiro select eu consegui fazer funcionar, mas o segundo mostra a média de todas as disciplinas. Preciso que ela mostra apenas a disciplina com a maior média.

 

THX!

Compartilhar este post


Link para o post
Compartilhar em outros sites
<br />Obrigada, mas só uma coisa, o primeiro select eu consegui fazer funcionar, mas o segundo mostra a média de todas as disciplinas. Preciso que ela mostra apenas a disciplina com a maior média.<br /><br />THX!<br />
<br /><br /><br />

 

entao da um TOP 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.