+1 امتیاز
قبل در برنامه نویسی توسط (7.2هزار امتیاز)
بسیاری از توابع داخلی SQL مانند SUM و COUNT علاوه بر اینکه به صورت Aggregate قابل استفاده اند، عنوان می شود که به صورت analytic نیز قابل استفاده اند. توابع analytic چیستند و اصولا این دو نوع تابع چه تفاوتی با هم داند؟

1 پاسخ

+1 امتیاز
قبل توسط (7.2هزار امتیاز)
 
بهترین پاسخ

توابع Aggregrate بر روی یک یا چند ستون عمل کرده و نتیجه تجمیع شده آن را برای شما به نمایش در می آورد. در حالی که توابع Analytic پس از تحلیل یک یا چند ستون آن را در کنار سایر ستونهای عادی به شما نمایش می دهد.

 

برای مثال جدول زیر را در نظر بگیرید:

ELECT *
  FROM test_mohi;

که دارای مقادیر زیر است:


FIRST_FIELD SECOUND_FIELD
----------- -------------
          1             1
          2             1
          1             2
          2             2
          2             0


5 rows selected.

با استفاده از تابع COUNT به صورت تجمعی نتیجه زیر را خواهیم یافت:

SELECT   first_field, COUNT (first_field)
    FROM test_mohi
GROUP BY first_field;

FIRST_FIELD COUNT(FIRST_FIELD)
----------- ------------------
          1                  2
          2                  3


2 rows selected.

در حالی که به صورت analytic مقدار زیر را خواهیم داشت:

SELECT first_field, secound_field,
       COUNT (first_field) OVER (PARTITION BY first_field)
  FROM test_mohi;


FIRST_FIELD SECOUND_FIELD COUNT(FIRST_FIELD)OVER(PARTITIONBYFIRST_FIELD)
----------- ------------- ----------------------------------------------
          1             1                                              2
          1             2                                              2
          2             0                                              3
          2             2                                              3
          2             1                                              3


5 rows selected.

حتما تفاوتش را متوجه شدید!

هنگام کار به صورت aggregrate نتیجه به group by محدود می شود و تنها در خروجی می توانیم از فیلدهای استفاده شده در group by استفاده نماییم. و برای مثال کوئری زیر در اوراکل منجر به خطا می شود:

SELECT   first_field, secound_field, COUNT (first_field)
    FROM test_mohi
GROUP BY first_field
                      *
Error at line 1
ORA-00979: not a GROUP BY expression

اما در توابع analytic می توانیم از تمام فیلدها استفاده نماییم و نتیجه تحلیل سایر فیلدها را نیز در کنار نتیجه مان داشته باشیم.

سوالات مشابه

+1 امتیاز
1 پاسخ 3.0هزار بازدید
+1 امتیاز
1 پاسخ 873 بازدید
+1 امتیاز
1 پاسخ 717 بازدید
+1 امتیاز
1 پاسخ 308 بازدید
0 امتیاز
1 پاسخ 532 بازدید
0 امتیاز
1 پاسخ 393 بازدید
0 امتیاز
1 پاسخ 561 بازدید
0 امتیاز
1 پاسخ 1.7هزار بازدید
+2 امتیاز
1 پاسخ 4.3هزار بازدید
0 امتیاز
1 پاسخ 105 بازدید
...