Как вернуть список студентов, которые изучают более двух предметов в SQL - PullRequest
0 голосов
/ 13 июня 2019

Учитывая следующую схему данных и минимальные записи данных, мне нужно сформулировать запрос, чтобы показать студентам, которые изучают более двух предметов.

ТАБЛИЦЫ В СЕРВЕРЕ SQL

create table Estudiante 
(
id int primary key not null,
nombre varchar(50)
)

insert into Estudiante (id, nombre)
values
('1','Maria'),
('2','Juan'),
('3','Yarlin'),
('4','Ana'),
('5','Marcos'),
('6','Juana'),
('7','Esther'),
('8','Luisa')

create table Materia 
(
id int primary key not null,
nombre varchar(50),
estado varchar(10)
)

insert into Materia (id, nombre, estado)
values
('1','Filosofía','activo'),
('2','Bases de datos','activo'),
('3','Programación','activo'),
('4','Literatura','activo'),
('5','Teología','activo')


create table MateriaProfesor 
(
id int primary key not null,
idMateria int foreign key references Materia,
idProfesor int foreign key references Profesor
)

insert into MateriaProfesor (id, idMateria, idProfesor)
values
('11','2','1'),
('12','1','2'),
('13','2','1'),
('14','3','4'),
('15','4','3'),
('16','5','2')

create table MateriaEstudiante 
(
id int primary key not null,
idMateria int foreign key references Materia(id),
idEstudiate int foreign key references Estudiante(id),
Fecha date
)

insert into MateriaEstudiante (id, idMateria, idEstudiate, Fecha)
values
('20','4','3','10/11/2017'),
('21','5','2','10/11/2017'),
('22','3','8','10/11/2017'),
('23','5','4','11/11/2017'),
('24','1','5','11/11/2017'),
('25','1','3','11/11/2017')

Ответы [ 3 ]

0 голосов
/ 13 июня 2019

Исходя из вашего вопроса и предоставленной информации, я задаю этот запрос.

SELECT estudiante.nombre, COUNT(materia.nombre) FROM `estudiante`
INNER JOIN materiaestudiante ON materiaestudiante.idEstudiate = estudiante.id
INNER JOIN materia ON materia.id = materiaestudiante.idMateria
GROUP BY estudiante.nombre
HAVING COUNT(materia.nombre) > 2
0 голосов
/ 13 июня 2019
  1. Кажется, что в определении таблицы используются неанглоязычные слова. А также так как вы не перевели, какая таблица представляет что сущность / операция, поэтому я собираюсь сделать догадки здесь с точки зрения понимание таблиц. Мои догадки:

    Estudiante = Студент
    nombre = имя

    Materia = Тема
    estado = статус

    MateriaEstudiante = SubjectStudentEnrollment
    Феча = Не знаю, какая это дата, поэтому игнорирую ее использование

    1. С приведенными выше догадками и с ограниченным приведенным объяснением подробности проблемы , вот быстрый запрос:
    ;WITH CTE AS
    (
         SELECT   E.id
                  ,E.nombre
                  ,SubCount = COUNT(ME.idMateria)
         FROM     MateriaEstudiante ME
                  INNER JOIN Estudiante E      
                    ON ME.idEstudiate = E.id
         GROUP    BY
                  E.id
                  ,E.nombre
         HAVING   COUNT(ME.idMateria) > 2
    )
    SELECT nombre
    FROM   CTE;    
    

Примечание: - Использование внутреннего соединения, потому что вам нужна информация об ученике и, следовательно, любая строка в MateriaEstudiante с NULL StudentId вам не подходит.

0 голосов
/ 13 июня 2019

Постарайтесь проанализировать вопрос шаг за шагом:

  1. перечислить всех студентов, значит GROUP BY
  2. , которые изучают, значит FROM StudentCourses LEFT JOIN Students ON StudentCourse.StudentID = Students.StudentID
  3. большечем 2 субъекта, значит where count(...) > 2

PS.1. Используйте английский.2. подумай сам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...