mysql - 选择多次出现的职业的学生姓名

标签 mysql

抱歉这个问题,我通常使用 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/

相关文章:

mysql - 错误1048。Mysql查找表中的列不能为空-缺少什么?

c# - 输入的字符串格式不正确

java - 使用 netbeans 将函数从 mysql 导出到 excel

sql - MySql:设置重复列的限制

javascript - 将 HTTPS 值发送到浏览器的 PHP 脚本

MySQL用户创建的临时表已满

mysql - 更改 Double 值 MySQL 的小数位

MySQL 合并列

php - 与当前日期比较时,通过多个元键查询帖子不起作用

mysql - Angular 2 和 MySQL 概念