我寫了這個查詢。但是,我想知道是否有更好的/專業的方式來重寫這個。什麼是SELECT ...,(SELECT ... FROM ...)FROM(SELECT ... FROM(SELECT ... FROM ...))`類型的構造的最佳選擇?
查找將在當年獲得獎金的員工。獲得獎金的條件是,他必須出售至少4000美元的特定類別的產品。
select yy.CurrentMonth, yy.ID, yy.Name, sum(yy.commission) as comm_total, sum(yy.bonus) as bonus_total
from
(select sysdate as CurrentMonth, ee.ID, ee.Name, cc.commission, (cc.commission * 25/100) as bonus
from employee ee,
(select e.id, pc.category_name, sum(quantity) as qty, pc.commission_rate, sum(quantity*pc.commission_rate) as commission
from sales s, product p, product_category pc, employee e
where to_char(sales_date, 'yyyy') = to_char(sysdate, 'yyyy')
and s.employee_id = e.id
and s.product_id = p.id
and p.product_category_name = pc.category_name
group by pc.category_name, e.id, pc.commission_rate
order by e.id) cc
where ee.ID = cc.id
and cc.commission >=4000
) yy
group by yy.ID, yy.Name, yy.CurrentMonth
編輯:表模式:
CREATE TABLE "XYZ"."EMPLOYEE"
( "ID" NUMBER,
"NAME" VARCHAR2(20 BYTE),
"AREA_NUMBER" NUMBER,
"EMP_TYPE_NAME" VARCHAR2(20 BYTE)
);
--------------------------------------------------------
-- DDL for Table PRODUCT
--------------------------------------------------------
CREATE TABLE "XYZ"."PRODUCT"
( "ID" NUMBER,
"NAME" VARCHAR2(20 BYTE),
"PRODUCT_CATEGORY_NAME" VARCHAR2(20 BYTE)
) ;
--------------------------------------------------------
-- DDL for Table SALES
--------------------------------------------------------
CREATE TABLE "XYZ"."SALES"
( "RECEIPT_NUMBER" NUMBER,
"SALES_DATE" DATE,
"QUANTITY" NUMBER,
"PRODUCT_ID" NUMBER,
"EMPLOYEE_ID" NUMBER
);
--------------------------------------------------------
-- DDL for Table PRODUCT_CATEGORY
--------------------------------------------------------
CREATE TABLE "XYZ"."PRODUCT_CATEGORY"
( "CATEGORY_NAME" VARCHAR2(20 BYTE),
"COMMISSION_RATE" FLOAT(126)
) ;
1.在選擇列表中按照相同的順序編寫列。 – jarlh
2.使用現代顯式的'JOIN'語法。 – jarlh
3.縮進... – jarlh