一个查询转换

题目:There are two table:

T_A (name VARCHAR2(100))

T_B (name VARCHAR2(100), name_a VARCHAR2(100));

The values are:

(1) Please write a SQL to output below result:

Name         Apple       Orange       Banana

-----------  ----------  -----------  -----------

Jane         Yes         Yes          Yes

Leo          Yes         Yes          No

David        No          No           Yes

 1 select name,
 2        case when ap>=1 then ‘YES‘ else ‘NO‘ end ap,
 3        case when og>=1 then ‘YES‘ else ‘NO‘ end og,
 4        case when ba>=1 then ‘YES‘ else ‘NO‘ end ba
 5   from (
 6 select name, sum(ap) ap, sum(og) og, sum(ba) ba
 7   from (select name_a name,
 8                decode(b.name, ‘Apple‘, 1, 0) ap,
 9                decode(b.name, ‘Orange‘, 1, 0) og,
10                decode(b.name, ‘Banana‘, 1, 0) ba
11           from t_b b)
12  group by name)

(3)  Please write a SQL to output below result:

(Find rows between 2 and 4, using ROWNUM)

Name        Name_a

---------   -------------

Orange       Jane

Banana       Jane

Apple        Leo

1 select *
2   from t_b
3  where rownum < 5
4 minus
5 select *
6   from t_b
7  where rownum  < 2

(4) Please write a Function:

This function has a parameter which has the same data type as

name in T_A and return the second fruit name in T_B.

if one person has no the second fruit, the function return the

first fruit.

Example: pass „Jane? as parameter, return „Orange?; pass

„David?, return „Banana?.

 1 create or replace function fun1(fname in varchar2) return varchar2 is
 2 fruit varchar2(10);
 3 n varchar2(10);
 4 ap number;
 5 og number;
 6 ba number;
 7 begin
 8   select name, ap, og, ba into n,ap,og,ba
 9     from (select name, sum(ap) ap, sum(og) og, sum(ba) ba
10             from (select name_a name,
11                          decode(b.name, ‘Apple‘, 1, 0) ap,
12                          decode(b.name, ‘Orange‘, 1, 0) og,
13                          decode(b.name, ‘Banana‘, 1, 0) ba
14                     from t_b b)
15            group by name)
16    where name = fname;
17
18    if ap = 1 and og = 1 then select ‘Orange‘ into fruit from dual;
19    elsif ap = 1 and og = 0 and ba = 1 then select ‘Banana‘ into fruit from dual;
20    elsif ap = 0 and og = 1 and ba = 1 then select ‘Banana‘ into fruit from dual;
21    elsif ap = 1 and og = 0 and ba = 0 then select ‘Apple‘ into fruit from dual;
22    elsif ap = 0 and og = 1 and ba = 0 then select ‘Orange‘ into fruit from dual;
23    elsif ap = 0 and og = 0 and ba = 1 then select ‘Banana‘ into fruit from dual;
24    end if;
25
26
27    return (fruit);
28 end fun1;

这里暂时还没想出更好的办法。。。

时间: 2024-11-06 15:52:04

一个查询转换的相关文章

oracle查询转换_view merge

oracle对于子查询的支持做的很好,oracle optimizer会对inline view进行query transfomation,即视图合并,不过也经常带来意想不到的问题.下面是一个inline view的merge的例子: 1, 创建临时表 1 create table test1 as select * from dba_objects; 2 create table test2 as select * from dba_objects; 2, 以下查询语句 select * fr

Oracle 查询转换之子查询展开

概念:子查询展开(Subquery Unnesting)是优化器处理带子查询的目标sql的一种优化手段,它是指优化器不再将目标sql中子查询当作一个独立的处理单元来单独执行,而是将该子查询转换为它自身和外部查询之间等价的表连接.这种等价连接转换要么是将子查询展开(即将该子查询中的表,视图从子查询中拿出来,然后和外部查询中的表,视图做表连接),要么是不拆开但是会把该子查询转换为一个内嵌视图(Inline View)然后再和外部查询中的表,视图做表连接.Oracle 会确保子查询展开所对应的等价连接

优化器的查询转换

1.视图合并 SQL> create view emp_vm as 2 select empno,ename,job,sal,comm,deptno 3 from emp 4 where deptno=30; View created. SQL> select empno 2 from emp_vm 3 where empno > 150; EMPNO ---------- 7499 7521 7654 7698 7844 7900 6 rows selected. SQL> se

查询转换

视图合并,视图合并是一种能将内嵌或存储式视图展开为能够独立分析或者与查询剩余部分合成总体执行计划的独立查询的转换,改写后的语句基本上不包含视图.视图合并常常发生在当外部查询块的谓语包括下列项的时候. 能够在另一个查询块的索引中使用的列 能够在另一个查询块的分区截断中使用的列 在一个联结视图中能够限制返回行数的条件 . select * from orders o,(select sales_rep_id from orders) o_view where o.sales_rep_id=o_vie

设计一个查询词提示系统

查询词提升是现代搜索引擎中广泛使用的一种技术,当用户输入查询词前缀时,会给出一系列相关的查询词推荐,例如在搜索框内输入"中国",会提升"中国好声音","中国银行", "中国联通"等,尝试设计一个查询词提示系统,回答以下问题: 1.给定一个查询词集合,用何种数据结构和算法来构建最基本的提示系统?要求输入中文和拼音都能正常工作 2.用户输入的前缀下可能有很多可提示的查询词,如何对这些查询词进行排序,将用户选择概率更高的词放在前面?

oracle查询转换_inlist转换

oracle的optimizer会对一些sql语句进行查询转换,比如: 合并视图 子查询非嵌套化 inlist转换 下面讲讲遇到的in list转化优化的案例: create table test( col1 varchar2(12) col2 number ext varchar2(4000) ); create index test_ind on test(user_id, col2); create sequence seq_test cache 200; 第一步:准备一些测试数据(10个

带您理解SQLSERVER是如何执行一个查询的

原文地址:http://www.cnblogs.com/lyhabc/p/3367274.html 看这篇文章之前,阁下可以先看一下下面的文章 SQLSERVER独特的任务调度算法"SQLOS" SQL Server SQLOS 的任务调度[转] 翻译自: http://rusanu.com/2013/08/01/understanding-how-sql-server-executes-a-query/ http://www.codeproject.com/Articles/6303

SQL Server 2012:SQL Server体系结构——一个查询的生命周期(第2部分)

计划缓存(Plan Cache) 如果SQL Server已经找到一个好的方式去执行一段代码时,应该把它作为随后的请求重用,因为生成执行计划是耗费时间且资源密集的,这样做是有有意义的. 如果没找到被缓存的计划,然后命令分析器(Command Parser)在T-SQL基础上生成一个查询树(query tree).查询树(query tree)的内部结构是通过树上的每个结点代表查询中需要的执行操作.这个树然后被传给查询优化器(Query Optimizer)去处理.我们的简单查询没有一个存在的计划

一个查询交易导致数据库CPU使用率高的问题

这一阵子在做一个查询交易的压力测试,使用的AIX+informix数据库.应用和数据库分别部署在两台机器上.使用loadrunner进行并发测试.相关表的历史数据是20W级别的.使用20个并发进行测试. 测试过程中,应用服务器负载正常,数据库服务器磁盘.网络使用率正常,但是CPU使用率却是98%左右.觉得很奇怪,因为这台机器是测试环境中性能最好的,表现不应该如此.于是先猜测会不会是informix的参数配置不对,于是搜了些informix参数中影响CPU使用率的参数调了一遍,但是现象依旧.对里面