抱歉这个问题,我通常使用 PostgreSQL 但 MySQL 我找不到我的腿在其中, 我有这个数据库:
create table Students (
Student_id int,
Student_name varchar(100)
);
create table Grades
(
student_id numeric,
Profession varchar(10),
Grade numeric
);
insert into Students(Student_id,Student_name) values (1,"avi"),(2,"david"), (3,"mosh"), (4,"adir");
insert into Grades values (2,'math',95), (3,"sport",25), (4,"english",30);
insert into Grades(student_id,Profession) values (1,'math');
我想多次获取其他专业论文的学生姓名 在此示例中,输出将是:
avi
david
因为两者都在学习数学
这是我迄今为止的尝试:
select
student_name,
profession
from Students
inner join Grades
on Students.Student_id = Grades.Student_id
group by profession
count(profession) > 1;
这是一个指向 SQL fiddle 的链接
最佳答案
子查询返回专业学生数量,并与学生和成绩结合起来检索最终结果,其中每个专业的 no_of_student 出现多个。
-- Mysql
SELECT s.student_name
FROM Students s
inner join Grades g
on s.Student_id = g.Student_id
inner join (SELECT Profession
, COUNT(1) no_of_std
FROM Grades
GROUP BY Profession) t
on g.Profession = t.Profession
AND t.no_of_std > 1
order by s.student_id
请检查此网址 https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=a59293c694549e39bcf1678050f6b6f1
注意:此查询也适用于所有 RDBMS(PostgreSQL、MSSQL、MySQL、ORACLE),因为此处使用了所有基本语法。
最新版本的 mysql(v5.8),支持分析功能,这也适用于 postgresql、MSSQL 等
SELECT t.student_name
FROM (SELECT s.Student_id, s.student_name
, COUNT(s.Student_id) OVER (PARTITION BY Profession) no_of_std
FROM Students s
inner join Grades g
on s.Student_id = g.Student_id) t
where t.no_of_std > 1
请检查此网址 https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=f9bced508d1bfc77aacd8b5826aa6a38
对于 PostgreSQL,请检查此网址 https://dbfiddle.uk/?rdbms=postgres_11&fiddle=1555612e72404eddc820c254c708304a
关于mysql - 选择多次出现的职业的学生姓名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70532679/