Oracle PL/SQL Tutorial/Query Select/Multi column subquery

Материал из SQL эксперт
Перейти к: навигация, поиск

inline view: What percentage of these items exist in each bin selected

   <source lang="sql">

SQL> SQL> create table t

 2  (item number,
 3   bin number,
 4   primary key (bin , item) );

Table created. SQL> SQL> insert into t values(2, 34); 1 row created. SQL> insert into t values(45,34); 1 row created. SQL> insert into t values(76,34); 1 row created. SQL> insert into t values(76,35); 1 row created. SQL> insert into t values(89,35); 1 row created. SQL> insert into t values(45,35); 1 row created. SQL> insert into t values(45,36); 1 row created. SQL> SQL> select * from t

 2  order by 1,2;
        2         34
       45         34
       45         35
       45         36
       76         34
       76         35
       89         35

7 rows selected. SQL> SQL> SQL> select bin, count(*), count(*)/cnt

 2  from (
 3         select bin, count(distinct item) over () AS cnt
 4         from t
 5         where item in (2,45,76,89) )
 6  group by bin, cnt
 7  /
       34          3          .75
       35          3          .75
       36          1          .25

3 rows selected. SQL> drop table t; Table dropped. SQL></source>


Multi-column subquery

   <source lang="sql">

SQL> SQL> CREATE TABLE product_order (

 2       product_name  VARCHAR2(25),
 3       salesperson   VARCHAR2(3),
 4       order_date DATE,
 5       quantity      NUMBER(4,2)
 6  );

Table created. SQL> SQL> SQL> INSERT INTO product_order VALUES ("Product 1", "CA", "14-JUL-03", 1); 1 row created. SQL> INSERT INTO product_order VALUES ("Product 2", "BB", "14-JUL-03", 75); 1 row created. SQL> INSERT INTO product_order VALUES ("Product 3", "GA", "14-JUL-03", 2); 1 row created. SQL> INSERT INTO product_order VALUES ("Product 4", "GA", "15-JUL-03", 8); 1 row created. SQL> INSERT INTO product_order VALUES ("Product 5", "LB", "15-JUL-03", 20); 1 row created. SQL> INSERT INTO product_order VALUES ("Product 6", "CA", "16-JUL-03", 5); 1 row created. SQL> INSERT INTO product_order VALUES ("Product 7", "CA", "17-JUL-03", 1); 1 row created. SQL> SQL> SQL> SQL> SELECT * FROM product_order ORDER BY product_name, order_date; PRODUCT_NAME SAL ORDER_DAT QUANTITY


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

Product 1 CA 14-JUL-03 1 Product 2 BB 14-JUL-03 75 Product 3 GA 14-JUL-03 2 Product 4 GA 15-JUL-03 8 Product 5 LB 15-JUL-03 20 Product 6 CA 16-JUL-03 5 Product 7 CA 17-JUL-03 1 7 rows selected. SQL> SQL> SELECT * FROM product_order

 2  WHERE  (product_name, order_date)
 3  IN     (SELECT product_name, MAX(order_date) FROM product_order GROUP BY product_name);

PRODUCT_NAME SAL ORDER_DAT QUANTITY


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

Product 1 CA 14-JUL-03 1 Product 2 BB 14-JUL-03 75 Product 3 GA 14-JUL-03 2 Product 4 GA 15-JUL-03 8 Product 5 LB 15-JUL-03 20 Product 6 CA 16-JUL-03 5 Product 7 CA 17-JUL-03 1 7 rows selected. SQL> SQL> drop table product_order; Table dropped. SQL> SQL></source>


Subquery in from clause

   <source lang="sql">

SQL> SQL> create table myTable

 2  as
 3  select rownum id, a.*
 4    from all_objects a
 5   where 1=0
 6  /

Table created. SQL> SQL> SQL> select *

 2    from myTable myTable1, ( select owner, max(last_ddl_time) max_time from myTable group by owner ) myTable2
 3   where myTable1.owner = myTable2.owner
 4  /

no rows selected SQL> drop table myTable; Table dropped.</source>