OCP 1Z0 051 140

SELECT prod_name
  FROM products
 WHERE (unit_price * qty_in_hand) =
       (SELECT MAX(unit_price * qty_in_hand) FROM products);

140. Examine the structure of the PRODUCTS table: 
name          Null        Type 
PROD_ID       NOT NULL    NUMBER(4) 
PROD_NAME                VARCHAR2(20) 
PROD_STATUS              VARCHAR2(6) 
QTY_IN_HAND              NUMBER(8,2) 
UNIT_PRICE               NUMBER(10,2) 
You  want  to  display  the  names  of  the  products  that  have  the  highest  total  value  for  UNIT_PRICE  * 
QTY_IN_HAND. 
Which SQL statement gives the required output? 
A. SELECT prod_name  
FROM products  
WHERE (unit_price * qty_in_hand) = (SELECT MAX(unit_price * qty_in_hand)  
FROM products); 
B. SELECT prod_name  
FROM products  
WHERE (unit_price * qty_in_hand) = (SELECT MAX(unit_price * qty_in_hand)  
FROM products  
GROUP BY prod_name); 
C. SELECT prod_name  
FROM products  
GROUP BY prod_name  
HAVING MAX(unit_price * qty_in_hand) = (SELECT MAX(unit_price * qty_in_hand)  
FROM products  
GROUP BY prod_name); 
D. SELECT prod_name  
FROM products  
WHERE (unit_price * qty_in_hand) = (SELECT MAX(SUM(unit_price * qty_in_hand))  
FROM products)  
GROUP BY prod_name; 

CREATE OR REPLACE VIEW test.products AS
SELECT p.prod_id,
       p.prod_name,
       p.prod_status,
       10                AS qty_in_hand,
       p.prod_list_price AS unit_price
  FROM sh.products p
 WHERE rownum <= 10;


要求取最高unit_price * qty_in_hand的name,得到的应该是一条数据

SQL> SELECT prod_name
  2    FROM products
  3   WHERE (unit_price * qty_in_hand) =
  4         (SELECT MAX(unit_price * qty_in_hand) FROM products);
PROD_NAME
--------------------------------------------------
Envoy Ambassador
1 row selected

B C 子查询返回的显然不是最高,而是不同prod的最高unit_price * qty_in_hand,返回的是多条数据。=多行数据会报错
SQL> SELECT prod_name
  2    FROM products
  3   WHERE (unit_price * qty_in_hand) =
  4         (SELECT MAX(unit_price * qty_in_hand)
  5            FROM products
  6           GROUP BY prod_name);
SELECT prod_name
  FROM products
 WHERE (unit_price * qty_in_hand) =
       (SELECT MAX(unit_price * qty_in_hand)
          FROM products
         GROUP BY prod_name)
ORA-01427: single-row subquery returns more than one row
SQL> SELECT prod_name
  2  FROM products
  3  GROUP BY prod_name
  4  HAVING MAX(unit_price * qty_in_hand) = (SELECT MAX(unit_price * qty_in_hand)
  5  FROM products
  6  GROUP BY prod_name);
SELECT prod_name
FROM products
GROUP BY prod_name
HAVING MAX(unit_price * qty_in_hand) = (SELECT MAX(unit_price * qty_in_hand)
FROM products
GROUP BY prod_name)
ORA-01427: single-row subquery returns more than one row

D 中的聚合函数嵌套会报错
SQL> SELECT MAX(SUM(unit_price * qty_in_hand)) FROM products;
SELECT MAX(SUM(unit_price * qty_in_hand)) FROM products
ORA-00978: nested group function without GROUP BY

Answer: A 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值