استفاده Partition By در اوراکل
برای اینکه این موضوع برای دوستان کاملا شفاف شود آن را با مثال بیان می کنم. برای مثال از جدول EMP در دیتابیس اوراکل استفاده می شود.
مورد کاربرد Partition By در Oracle:
-
توابع تحلیلی(analytic functions) از Partition By استفاده می شود.
-
بوسیله OVER شما می توانید بدون استفاده از Group By اطلاعات تجمیعی را بدست آورید.به بیا ن دیگر می توانید جزئیات ردیف ها را با داده های جمع آوری شده در کنار هم داشته باشید.
-
خیلی وقت ها اتفاق افتاده که شما می خواهید عمل تجمیعی مثل جمع، تعداد و .. را بروی اطلاعاتی از جداول انجام دهید و در حین حال نیاز به PK آن جدول هم دارید.
-
استفاده از چندین توابع با استفاده از شرایط خاص فیلدهای جداول
مثال اول:
همانطور که مشاهده می کنید.به ازای هر نوع Deptno تعداد آن نیز جلوی هر رکورد آورده شده است
COUNT(*) = بدست آوردن تعداد رکورد
OVER = برای تنظیمات روی ستونها
(PARTITION BY deptno) = آنهایی که شبیه Deptno… هستند
SELECT empno, deptno, COUNT(*)
OVER (PARTITION BY deptno) DEPT_COUNT
FROM emp
OVER (PARTITION BY deptno) DEPT_COUNT
FROM emp
Result 1:
۷۷۸۲-۱۰--۳
۷۹۳۴-۱۰--۳
۷۸۳۹-۱۰--۳
۷۹۰۲-۲۰--۵
۷۷۸۸-۲۰--۵
۷۵۶۶-۲۰--۵
۷۳۶۹-۲۰--۵
۷۸۷۶-۲۰--۵
۷۵۲۱-۳۰--۶
۷۶۵۴-۳۰--۶
۷۸۴۴-۳۰--۶
۷۹۰۰-۳۰--۶
۷۴۹۹-۳۰--۶
۷۶۹۸-۳۰—۶
Result 1:
۷۷۸۲-۱۰--۳
۷۹۳۴-۱۰--۳
۷۸۳۹-۱۰--۳
۷۹۰۲-۲۰--۵
۷۷۸۸-۲۰--۵
۷۵۶۶-۲۰--۵
۷۳۶۹-۲۰--۵
۷۸۷۶-۲۰--۵
۷۵۲۱-۳۰--۶
۷۶۵۴-۳۰--۶
۷۸۴۴-۳۰--۶
۷۹۰۰-۳۰--۶
۷۴۹۹-۳۰--۶
۷۶۹۸-۳۰—۶
مثال اول با Group by:
همانطور که مشاهده می کنید تعداد بر اساس Deptno گروه بندی شده است
SELECT deptno, COUNT(*) DEPT_COUNT
FROM emp
Group by deptno
FROM emp
Group by deptno
Result 1:
۳۰-۶
۲۰-۵
۱۰-۳
Result 1:
۳۰-۶
۲۰-۵
۱۰-۳
مثال دوم:
همانطور که مشاهده می کنید بیشترین حقوق یکبار بر اساس DEPTNO محاسبه می شود بعنوان فیلد MAX_SAL_DEPTNO و نیز بار دیگر بیشترین حقوق بر اساس JOB محاسبه می شود بعنوان فیلد MAX_SAL_JOB.
یکبار جدول EMP را در دیتابیس اوراکل بدون شرط اجرا کنید و سپس در صفحه ای دیگر کوئری زیر را اجرا کنید و جواب آن را با جدول EMP مقایسه کنید.
SELECT
ENAME,
SAL,
DEPTNO,
MAX(SAL) OVER (PARTITION BY DEPTNO) MAX_SAL_DEPTNO,
JOB,
MAX(SAL) OVER (PARTITION BY JOB) MAX_SAL_JOB
FROM
EMP;
ENAME,
SAL,
DEPTNO,
MAX(SAL) OVER (PARTITION BY DEPTNO) MAX_SAL_DEPTNO,
JOB,
MAX(SAL) OVER (PARTITION BY JOB) MAX_SAL_JOB
FROM
EMP;
مثال سوم:
select deptno, ename, hiredate,
count(*) over (partition by deptno order by hiredate nulls first range 100 preceding) cnt_range,
count(*) over (partition by deptno order by hiredate nulls first rows 2 preceding) cnt_rows
from emp
where deptno in (10, 20)
order by deptno, hiredate
count(*) over (partition by deptno order by hiredate nulls first range 100 preceding) cnt_range,
count(*) over (partition by deptno order by hiredate nulls first rows 2 preceding) cnt_rows
from emp
where deptno in (10, 20)
order by deptno, hiredate
مثال ها و مقایسه های زیادی را می توانید در لینک زیر مشاهده کنید:
asktom.oracle.com
امیدوار هستم که به دوستان کمک کرده باشد.
5/5 - (1 امتیاز)
جستجو
مطالب اخیر
نظرات اخیر
- مهرسا سعادت در نقشه راه اوراکل APEX برای نسخه بعدی
- سعید حسن پور در رفع مشکل Persian Date Picker برای اوراکل ایپکس(اپکس) ۲۱
- حسین ابراهیم زاده در رفع مشکل Persian Date Picker برای اوراکل ایپکس(اپکس) ۲۱
- مهدی جوینی در رفع مشکل Persian Date Picker برای اوراکل ایپکس(اپکس) ۲۱
- محمد در نصب و راه اندازی (Standalone) اوراکل APEX
بایگانی
- اردیبهشت ۱۴۰۱ (۱)
- مرداد ۱۴۰۰ (۱)
- شهریور ۱۳۹۹ (۱)
- بهمن ۱۳۹۸ (۱)
- دی ۱۳۹۸ (۶)
- آذر ۱۳۹۸ (۲۰)
- آبان ۱۳۹۸ (۱۶)
- مهر ۱۳۹۸ (۲۲)
- شهریور ۱۳۹۸ (۲)
- مرداد ۱۳۹۸ (۷)
- تیر ۱۳۹۸ (۹)
- فروردین ۱۳۹۸ (۳)
برچسبها
AOP
APEX
apexrad
captcha
CDN
constraint
ebs
epg
forms
index
injection
longtype
Materialized-view
Oracle Application Express
orclapex
performance
Persian Sort
plsql
session
sql
standalone
variable scope
XE
امنیت
اوراکل
اپکس
ایندکس
ایپکس
بنبست
بهینه ساز
تاریخ شمسی
ترجمه
ترفند
حروف فارسی
داکیومنت
داینامیک
شمسی
مرتب سازی فارسی
نصب
نکته
پلاگین
یونیک