Я написал этот вопрос. Но, мне интересно, есть ли лучший/профессиональный способ переписать это.Что является лучшей альтернативой 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
Edit: Таблица схемы:
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