FETCH / ROWNUM () первые n процентов от каждого BRANCH (BRANCH_NO). Я пытаюсь получить топ 10 процентов каждой ветви - PullRequest
1 голос
/ 20 февраля 2020
 SELECT e.EMPLOYEE_NO, e.FNAME, e.LNAME, b.BRANCH_NO, o.SUBTOTAL,
     PERCENT_RANK() OVER ( partition by e.EMPLOYEE_NO ORDER BY e.EMPLOYEE_NO ASC) AS percent
 FROM EMPLOYEE e
 INNER JOIN BRANCH b
  ON e.BRANCH_NO = b.BRANCH_NO
 INNER JOIN ORDERS o
  ON o.BRANCH_NO = b.BRANCH_NO
 ORDER BY b.BRANCH_NO
 FETCH FIRST 10 PERCENT ROWS ONLY;
  • Я пытаюсь получить первые 10 процентов каждой ветви.
  • PL SQL

1 Ответ

0 голосов
/ 20 февраля 2020

Вы можете использовать analytical functions следующим образом:

Select employee_no,
       Fname,
       Lname,
       employee_total_order,
       Branch_no
From
(SELECT e.EMPLOYEE_NO, e.FNAME, e.LNAME, b.BRANCH_NO,
        SUM(o.SUBTOTAL) AS employee_total_order,
        Count(distinct e.employee_no) 
         over (partition by b.branch_no) as total_emp,
        Row_number() 
         over (partition by b.branch_no order by SUM(o.SUBTOTAL) desc nulls last) as rn
 FROM EMPLOYEE e
 INNER JOIN BRANCH b
  ON e.BRANCH_NO = b.BRANCH_NO
 INNER JOIN ORDERS o
  ON o.BRANCH_NO = b.BRANCH_NO
 Group by e.EMPLOYEE_NO, e.FNAME, e.LNAME, b.BRANCH_NO)
Where rn/total_emp <= 0.1
      or rn = 1 -- this condition is used to fetch atleast one employee
                -- if branch has less than 10 employees

Ура !!

...