抱歉這個問題,我通常使用 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 小提琴的鏈接
uj5u.com熱心網友回復:
子查詢回傳專業的學生數量,并與學生和成績一起檢索最終結果,其中每個專業的 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,請檢查這個 url https://dbfiddle.uk/?rdbms=postgres_11&fiddle=1555612e72404eddc820c254c708304a
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/399389.html
標籤:mysql
上一篇:LEFTJOIN不回傳預期結果
