Advertisement
ExcelStore

Расширенные возможности SQL - Команд SQL в рамках урока #13

Nov 14th, 2021
2,442
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 4.66 KB | None | 0 0
  1. -- Оконные функции в SQL (Аналитические функции)
  2. -- https://youtu.be/yeIoV832zKw
  3.  
  4. -------------------------------------------
  5. -- Расширенные возможности SQL. Примеры команд SQL в рамках урока #13.
  6.  
  7.  
  8. SELECT
  9.   название_функции(СТОЛБЕЦ_ДЛЯ_ВЫЧИСЛЕНИЙ)
  10.   OVER
  11.   (
  12.     partition BY СТОЛБЕЦ_ДЛЯ_ГРУППИРОВКИ
  13.     ORDER BY СТОЛБЕЦ_ДЛЯ_СОРТИРОВКИ
  14.     ROWS или RANGE выражение для ограничения строк в пределах группы
  15.   )
  16. FROM
  17.   ...
  18. ;
  19.  
  20.  
  21. SELECT
  22.   EMPLOYEE_ID, FIRST_NAME, LAST_NAME, HIRE_DATE, JOB_ID, SALARY,
  23.   SUM(SALARY) OVER (partition BY JOB_ID ORDER BY HIRE_DATE ROWS unbounded preceding) AS SUM_SALARY
  24. FROM employees
  25. WHERE JOB_ID = 'IT_PROG' OR (JOB_ID = 'SH_CLERK' AND HIRE_DATE >= '07.02.2007')
  26. ;
  27.  
  28.  
  29. SELECT
  30.   EMPLOYEE_ID, FIRST_NAME, LAST_NAME, HIRE_DATE, JOB_ID, SALARY,
  31.   SUM(SALARY) OVER (partition BY JOB_ID ORDER BY HIRE_DATE ROWS unbounded preceding) AS SUM_SALARY_1,
  32.   SUM(SALARY) OVER (partition BY JOB_ID ORDER BY HIRE_DATE ROWS BETWEEN unbounded preceding AND CURRENT ROW) AS SUM_SALARY_2
  33. FROM employees
  34. WHERE JOB_ID = 'IT_PROG' OR (JOB_ID = 'SH_CLERK' AND HIRE_DATE >= '07.02.2007')
  35. ;
  36.  
  37.  
  38. SELECT
  39.   EMPLOYEE_ID, FIRST_NAME, LAST_NAME, HIRE_DATE, JOB_ID, SALARY,
  40.   SUM(SALARY) OVER (partition BY JOB_ID ORDER BY HIRE_DATE ROWS BETWEEN unbounded preceding AND CURRENT ROW) AS SUM_SALARY_2,
  41.   SUM(SALARY) OVER (partition BY JOB_ID ORDER BY HIRE_DATE ROWS BETWEEN CURRENT ROW AND unbounded following) AS SUM_SALARY_3
  42. FROM employees
  43. WHERE JOB_ID = 'IT_PROG' OR (JOB_ID = 'SH_CLERK' AND HIRE_DATE >= '07.02.2007')
  44. ;
  45.  
  46.  
  47. SELECT
  48.   EMPLOYEE_ID, FIRST_NAME, LAST_NAME, HIRE_DATE, JOB_ID, SALARY,
  49.   SUM(SALARY) OVER (partition BY JOB_ID ORDER BY JOB_ID ROWS 2 preceding) AS SLIDING_TOTAL
  50. FROM employees
  51. WHERE JOB_ID = 'IT_PROG' OR (JOB_ID = 'SH_CLERK' AND HIRE_DATE >= '07.02.2007')
  52. ;
  53.  
  54.  
  55. SELECT
  56.   EMPLOYEE_ID, FIRST_NAME, LAST_NAME, HIRE_DATE, JOB_ID, SALARY,
  57.   SUM(SALARY) OVER (partition BY JOB_ID ORDER BY JOB_ID ROWS 1 preceding) AS SLIDING_TOTAL
  58. FROM employees
  59. WHERE JOB_ID = 'IT_PROG' OR (JOB_ID = 'SH_CLERK' AND HIRE_DATE >= '07.02.2007')
  60. ;
  61.  
  62.  
  63. SELECT
  64.   EMPLOYEE_ID, FIRST_NAME, LAST_NAME, HIRE_DATE, JOB_ID, SALARY,
  65.   SUM(SALARY) OVER (partition BY JOB_ID ORDER BY JOB_ID ROWS BETWEEN CURRENT ROW AND 1 following) AS SLIDING_TOTAL
  66. FROM employees
  67. WHERE JOB_ID = 'IT_PROG' OR (JOB_ID = 'SH_CLERK' AND HIRE_DATE >= '07.02.2007')
  68. ;
  69.  
  70.  
  71. SELECT
  72.   EMPLOYEE_ID, FIRST_NAME, LAST_NAME, HIRE_DATE, JOB_ID, SALARY,
  73.   avg(SALARY) OVER (ORDER BY HIRE_DATE ASC ROWS 100 preceding) AS SLIDING_TOTAL
  74. FROM employees
  75. ;
  76.  
  77.  
  78. SELECT
  79.   EMPLOYEE_ID, FIRST_NAME, LAST_NAME, HIRE_DATE, SALARY,
  80.   avg(SALARY) OVER (ORDER BY HIRE_DATE ROWS 3 preceding) AS AVG_SALARY
  81. FROM employees
  82. WHERE JOB_ID = 'FI_ACCOUNT' OR (JOB_ID = 'SH_CLERK' AND HIRE_DATE < '01.04.2005')
  83. ;
  84.  
  85.  
  86. SELECT
  87.   EMPLOYEE_ID, FIRST_NAME, LAST_NAME, HIRE_DATE, SALARY,
  88.   avg(SALARY) OVER (ORDER BY HIRE_DATE ROWS 3 preceding) AS AVG_SALARY,
  89.   avg(SALARY) OVER (ORDER BY HIRE_DATE range BETWEEN INTERVAL '3' MONTH preceding AND CURRENT ROW) AS AVG_SALARY_2
  90. FROM employees
  91. WHERE JOB_ID = 'FI_ACCOUNT' OR (JOB_ID = 'SH_CLERK' AND HIRE_DATE < '01.04.2005')
  92. ;
  93.  
  94.  
  95. SELECT
  96.   EMPLOYEE_ID, FIRST_NAME, LAST_NAME, HIRE_DATE, JOB_ID, SALARY,
  97.   SUM(SALARY) OVER (partition BY JOB_ID ORDER BY HIRE_DATE ROWS BETWEEN unbounded preceding AND CURRENT ROW) AS ROWS_SALARY,
  98.   SUM(SALARY) OVER (partition BY JOB_ID ORDER BY HIRE_DATE range BETWEEN unbounded preceding AND CURRENT ROW) AS RANGE_SALARY
  99. FROM employees
  100. WHERE JOB_ID = 'IT_PROG' OR (JOB_ID = 'SH_CLERK' AND HIRE_DATE >= '07.02.2007')
  101. ;
  102.  
  103.  
  104. SELECT
  105.   EMPLOYEE_ID, FIRST_NAME, LAST_NAME, HIRE_DATE, SALARY,
  106.   SUM(SALARY) OVER (ORDER BY HIRE_DATE) AS SUM_SALARY
  107. FROM employees
  108. WHERE JOB_ID = 'IT_PROG' OR (JOB_ID = 'SH_CLERK' AND HIRE_DATE >= '07.02.2007')
  109. ;
  110.  
  111.  
  112. SELECT
  113.   EMPLOYEE_ID, FIRST_NAME, LAST_NAME, HIRE_DATE, SALARY,
  114.   SUM(SALARY) OVER (ORDER BY HIRE_DATE) AS SUM_SALARY,
  115.   SUM(SALARY) OVER (ORDER BY HIRE_DATE range BETWEEN unbounded preceding AND CURRENT ROW) AS SUM_SALARY_2
  116. FROM employees
  117. WHERE JOB_ID = 'IT_PROG' OR (JOB_ID = 'SH_CLERK' AND HIRE_DATE >= '07.02.2007')
  118. ;
  119.  
  120.  
  121. SELECT
  122.   EMPLOYEE_ID, FIRST_NAME, LAST_NAME, HIRE_DATE, SALARY,
  123.   SUM(SALARY) OVER (ORDER BY HIRE_DATE) AS SUM_SALARY,
  124.   SUM(SALARY) OVER (ORDER BY HIRE_DATE range BETWEEN unbounded preceding AND CURRENT ROW) AS SUM_SALARY_2,
  125.   SUM(SALARY) OVER () AS SUM_SALARY_3
  126. FROM employees
  127. WHERE JOB_ID = 'IT_PROG' OR (JOB_ID = 'SH_CLERK' AND HIRE_DATE >= '07.02.2007')
  128. ;
  129.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement