create table Student
(
Name varchar(20),
Subject varchar(20),
Mark int
)
insert into Student values('A','M',30),
('A','P',45),
('B','M',47),
('B','P',70)
SELECT * FROM Student
上面是表格的代码。考虑通过标记= 35 需要显示通过主题“ P”但未通过主题“ M”的姓名
答案 0 :(得分:3)
SELECT Name
FROM Student
group by Name
having
min(case when Subject = 'M' then Mark end) < 35
and
min(case when Subject = 'P' then Mark end) >= 35
答案 1 :(得分:1)
根据您所说的内容,您需要通过科目'P'
而同时未能通过科目'M'
的学生
SELECT Name
FROM Student
WHERE Subject = 'P' AND Mark >= 35
AND Name IN (SELECT Name FROM Student WHERE Subject = 'M' AND Mark < 35);
结果:
+----+------+
| | Name |
+----+------+
| 1 | A |
+----+------+
甚至
SELECT *
FROM Student S1
WHERE EXISTS
(
SELECT 1
FROM Student S2
WHERE S1.Name = S2.Name AND
((S1.Mark > 35 AND S2.Mark < 35) OR (S2.Mark > 35 AND S1.Mark < 35))
)
结果:
+----+------+---------+------+
| | Name | Subject | Mark |
+----+------+---------+------+
| 1 | A | M | 30 |
| 2 | A | P | 45 |
+----+------+---------+------+
答案 2 :(得分:1)
您可以使用Exists
select * from Student s where exists(select 1 from Student s1
where s1.Name=s.Name
group by s1.Name
having sum(case when s1.Subject='P' and s1.Mark>=35 then 1 else 0 end)>0
and sum(case when s1.Subject='M' and s1.Mark<35 then 1 else 0 end)>0
)
Name Subject Mark
A M 30
A P 45
答案 3 :(得分:0)
SELECT Name, M, P
FROM
(SELECT Name, Subject, Mark
FROM Student) AS SourceTable
PIVOT
(
AVG(Mark)
FOR Subject IN (M, P)
) AS PivotTable
WHERE M < 35 and P >= 35