T_subject表是这样的
id userId subject result
1 小名 语文 及格
2 小名 数学 及格
3 小红 语文 不及格
4 小红 数学 及格
5 小白 语文 不及格
6 小白 数学 不及格
7 小黑 语文 不及格
8 小黑 数学 及格该如何写sql语句,把语文数学都不及格的人不输出。 只输出这样的:
id userId subject result
1 小名 语文 及格
2 小名 数学 及格
3 小红 语文 不及格
4 小红 数学 及格
7 小黑 语文 不及格
8 小黑 数学 及格语文数学都不及格的小白就没显示出来了- -
id userId subject result
1 小名 语文 及格
2 小名 数学 及格
3 小红 语文 不及格
4 小红 数学 及格
5 小白 语文 不及格
6 小白 数学 不及格
7 小黑 语文 不及格
8 小黑 数学 及格该如何写sql语句,把语文数学都不及格的人不输出。 只输出这样的:
id userId subject result
1 小名 语文 及格
2 小名 数学 及格
3 小红 语文 不及格
4 小红 数学 及格
7 小黑 语文 不及格
8 小黑 数学 及格语文数学都不及格的小白就没显示出来了- -
create type ytt as enum('及格','不及格');
create table score(id integer, userid varchar(10), subject varchar(10), result ytt);insert into score values
(1,'小名','语文','及格'),
(2,'小名','数学','及格'),
(3,'小红','语文','不及格'),
(4,'小红','数学','及格'),
(5,'小白','语文','不及格'),
(6,'小白','数学','不及格'),
(7,'小黑','语文','不及格'),
(8,'小黑','数学','及格');select a.* from score as a,
(
select userid,sum(case when subject = '语文' and result = '不及格' then 1 when subject = '数学' and result = '不及格' then 1 else 0 end) as total
from score group by userid
) as b
where a.userid = b.userid and b.total < 2;结果:
1;"小名";"语文";"及格"
2;"小名";"数学";"及格"
3;"小红";"语文";"不及格"
4;"小红";"数学";"及格"
7;"小黑";"语文";"不及格"
8;"小黑";"数学";"及格"
subject='语文' and result='及格' 这个是语文及格
(subject='数学' and result='及格') 这个是数学及格你要的不是数学语文有一个及格的吗?
(select userid from test where(subject="语文" and result="及格")
OR (subject="数学" and result="及格") group by userid) b
where a.userid = b.userid;