Проблема SQL с выделением после объединения групп - PullRequest
1 голос
/ 28 октября 2019

У меня есть две таблицы:

Таблица факультетов:

(facultyName varchar(1000),foundationYear int,PRIMARY KEY(facultyName))

и Группы таблиц

(groupId int,facultyName varchar(10),groupNumber int,groupYear int, leaderStudentId int,PRIMARY KEY(groupId))

Я хочу выбрать все факультеты, в которых есть по крайней мере две группы, в которых год группы - 2008.

Это мой код

create table Students(studentId int, firstName varchar(10),lastName varchar[10],avgMark int,gender bool ,PRIMARY KEY(studentId));
create table Faculty (facultyName varchar(1000),foundationYear int,PRIMARY KEY(facultyName));
create table Groups (groupId int,facultyName varchar(10),groupNumber int,groupYear int, leaderStudentId int,PRIMARY KEY(groupId));
create table StudentsInGroup (studentId int,groupId int,PRIMARY KEY (studentId,groupId));
insert into Students values(1,"Kajik","Hakobyan",1900,1);
insert into Faculty values("kirarakan",1987);
insert into Faculty values("kirarakan1",1987);
insert into Faculty values("kirarakan2",1987);
insert into Groups values(1,"kirarakan",100,2008,1);
insert into Groups values(2,"kirarakan",100,2008,1);
insert into Groups values(3,"kirarakan",100,2008,1);
insert into Groups values(4,"kirarakan1",100,2007,1);
insert into Groups values(5,"kirarakan2",100,2008,1);
insert into Groups values(6,"kirarakan2",100,2008,1);
SELECT * FROM FACULTY;
SELECT * FROM GROUPS;
SELECT Faculty.facultyName,Faculty.foundationYear
FROM
(
Groups as A
join
Groups as B
on ( A.groupId <> B.groupId AND A.facultyName = B.facultyName And A.groupYear = 2008 AND B.groupYear = 2008  )
)
join
Faculty
on (A.facultyName = Faculty.facultyName)
;

Но я получаю "kirarakan" 6 раз, и я знаю, почемуЯ понимаю, но не знаю, как решить эту проблему.

Ответы [ 2 ]

1 голос
/ 28 октября 2019

Все, что вам нужно, это таблица Groups, поэтому group by facultyName и установите условие в предложении having:

select facultyName 
from Groups
where groupYear = 2008
group by facultyName
having count(distinct groupId) >= 2

См. Демоверсию . Результаты:

| facultyName |
| ----------- |
| kirarakan   |
| kirarakan2  |
0 голосов
/ 28 октября 2019
create table Students(studentId int, firstName varchar[10],lastName varchar[10],avgMark int,gender bool ,PRIMARY KEY(studentId));
create table Faculty (facultyName varchar[1000],foundationYear int,PRIMARY KEY(facultyName));
create table Groups (groupId int,facultyName varchar[10],groupNumber int,groupYear int, leaderStudentId int,PRIMARY KEY(groupId));
create table StudentsInGroup (studentId int,groupId int,PRIMARY KEY (studentId,groupId));
insert into Students values(1,"Kajik","Hakobyan",1900,1);
insert into Faculty values("kirarakan",1987);
insert into Faculty values("kirarakan1",1987);
insert into Faculty values("kirarakan2",1987);
insert into Groups values(1,"kirarakan",100,2008,1);
insert into Groups values(2,"kirarakan",100,2008,1);
insert into Groups values(3,"kirarakan",100,2008,1);
insert into Groups values(4,"kirarakan1",100,2007,1);
insert into Groups values(5,"kirarakan2",100,2008,1);
insert into Groups values(6,"kirarakan2",100,2008,1);
SELECT * FROM FACULTY;
SELECT * FROM GROUPS;
Select *
From
Faculty
INTERSECT
SELECT Faculty.facultyName,Faculty.foundationYear
FROM
Faculty 
join
Groups as A
on (Faculty.facultyName = A.facultyName)
join
Groups as B
on ( A.groupId <> B.groupId AND A.facultyName = B.facultyName AND A.groupYear = 2008 AND B.groupYear= 2008)
;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...