Oracle表的常用查询实验(五)

本文介绍了如何在Oracle数据库中查询合格与不合格的人员。通过实验,展示了当表中存在多条记录时,如何利用`DISTINCT`和`DECODE`函数结合`UNION`操作,正确找出满足条件的人员ID。同时,还提供了另一种使用`GROUP BY`和子查询的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Oracle表的常用查询实验(五)

 

1.问题描述:

test表中有ID(人员编号),A(考核标准),B(实际得分),C(课程编号)四个字段,一个ID可能会有多个科目的评分,如果一个ID中存在A=B,则合格,求合格的人员编号。

 

2.需求分析:

要得到的结果为:

ID     是否合格

1011   合格

1012   合格

1013   合格

1014   不合格

1015   合格

如果直接用decode()函数,则会出现同一id有合格和不合格的成绩,错误

故合格产品满足以下两个条件:(1)ID不能重复—》distinct (2)同一id存在A=B

 

3.解答过程:

(1)查出合格的

selectdistinctid,'合格' PJ fromtestwhereidin(selectidfromtestwhere a=b)

(2)查出不合格的

selectdistinctid,'不合格' PJ fromtestwhereidnotin(selectidfromtestwhere a=b)

(3)使用union联接

selectdistinctid,'合格' PJ fromtestwhereidin(selectidfromtestwhere a=b)union

selectdistinctid,'不合格' PJ fromtestwhereidnotin(selectidfromtestwhere a=b);

 

 

4. SQL代码:

selectdistinctid,'合格' PJ fromtestwhereidin(selectidfromtestwhere a=b)union

selectdistinctid,'不合格' PJ fromtestwhereidnotin(selectidfromtestwhere a=b);

或者

SELECT 'yes',ID FROM TEST WHERE A=BGROUP BY ID ORDER BY ID

SELECT 'no',ID FROM TEST WHERE ID NOT IN (SELECT ID FROM TEST WHERE A=B) GROUP BY ID ORDER BY ID

 

5.联想扩展:

假设只有A,B两列数据,如果存在A=B,则显示匹配成功(即根据A来判断)

select t3.xx,decode(t3.xx,t3.yy,'success','fail')匹配情况from

(select*from(selectdistinct A xx fromtest) t1leftjoin

 (selectdistinctyy fromtestwhere A=B) t2 on t1.xx=t2.yy) t3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值