SELECT
a.alloc_date,
p.plan,
p.emp_id,
a.veh,
a.contri_type,
a.amount,
SUM (a.alloc_qty) AS sum_alloc_qty, -- 1000 funds distributed
SUM (a.alloc_qty * a.amount) AS sum_alloc_value, -- 1000*2 = 2000
COUNT (DISTINCT part_id) AS sum_emp_count, -- 4 employees
MAX (a.alloc_qty * a.amount) AS max_value_to_one_emp, -- 600
null as "emp_count_with_max_value" -- Unable to retrieve - idealy answer should be 3 in this example
FROM
alloc a, emp p
WHERE
A.alloc_date >= TO_DATE ('20111001', 'YYYYMMDD')
AND a.emp_id = p.emp_id
GROUP BY
a.alloc_date,
p.plan,
p.emp_id,
a.veh,
a.contri_type,
a.amount
ORDER BY
alloc_date, emp_id, amount
ここでは、既存のクエリは次のように機能しています。
会社が1000のファンドを配布していて、各ファンドの価格が2であるとします。
現在、これらの1000の資金は4人の従業員に分配されています。
基本的な問題は、1人の従業員の資金の最大値を取得することです。仮に、資金の分配は次のとおりです。
emp1=600 (300*2), emp2=600 (300*2), emp3=600 (300*2), emp4=300 (300*1)
したがって、ここでは1人の従業員に対する資金の最大値=600です。
これは、クエリによって取得できるようになりました。
しかし、次の問題は、emp_count_with_max_value
各グループでこの最大値を与えられた従業員の数を持つはずの別の列()を取得することです。
この例では、3人の従業員であることがわかります。しかし、私は同じものを取得することはできません
ここでは、1つのグループのデータのみを示しました。結果のクエリ出力は次のようになります。
'11/12/86','abc','E25','pqr','qvr',2,1000,2000,4,600,3