Advertisement
ExcelStore

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

Nov 6th, 2021 (edited)
1,479
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 5.50 KB | None | 0 0
  1. -- Оконные функции в SQL (Аналитические функции)
  2. -- https://youtu.be/66PF_Ajn3XI
  3.  
  4. -------------------------------------------
  5. -- Расширенные возможности SQL. Примеры команд SQL в рамках урока #12.
  6.  
  7.  
  8. SELECT
  9.   название_функции(СТОЛБЕЦ_ДЛЯ_ВЫЧИСЛЕНИЙ)
  10.   OVER (partition BY СТОЛБЕЦ_ДЛЯ_ГРУППИРОВКИ ORDER BY СТОЛБЕЦ_ДЛЯ_СОРТИРОВКИ)
  11. FROM
  12.   ...
  13. ;
  14.  
  15.  
  16. SELECT
  17.   EMPLOYEE_ID, FIRST_NAME, LAST_NAME, JOB_ID, SALARY,
  18.   FIRST_VALUE(FIRST_NAME) OVER (PARTITION BY JOB_ID ORDER BY SALARY DESC) AS HIGHEST_PAID_EMPLOYEE
  19. FROM employees
  20. WHERE JOB_ID IN ('FI_ACCOUNT', 'IT_PROG', 'PU_CLERK')
  21. ;
  22.  
  23.  
  24. SELECT
  25.   EMPLOYEE_ID, FIRST_NAME, LAST_NAME, JOB_ID, SALARY,
  26.   FIRST_VALUE(FIRST_NAME ||' '|| LAST_NAME) OVER (PARTITION BY JOB_ID ORDER BY SALARY DESC) AS HIGHEST_PAID_EMPLOYEE
  27. FROM employees
  28. WHERE JOB_ID IN ('FI_ACCOUNT', 'IT_PROG', 'PU_CLERK')
  29. ;
  30.  
  31.  
  32. SELECT
  33.   EMPLOYEE_ID, FIRST_NAME, LAST_NAME, JOB_ID, SALARY,
  34.   FIRST_VALUE(FIRST_NAME ||' '|| LAST_NAME) OVER (PARTITION BY JOB_ID ORDER BY SALARY ASC) AS LOWEST_PAID_EMPLOYEE
  35. FROM employees
  36. WHERE JOB_ID IN ('FI_ACCOUNT', 'IT_PROG', 'PU_CLERK')
  37. ;
  38.  
  39.  
  40. SELECT
  41.   EMPLOYEE_ID, FIRST_NAME, LAST_NAME, JOB_ID, SALARY,
  42.   FIRST_VALUE(FIRST_NAME ||' '|| LAST_NAME) OVER (PARTITION BY JOB_ID ORDER BY SALARY ASC) AS LOWEST_PAID_EMPLOYEE,
  43.   LAST_VALUE(FIRST_NAME ||' '|| LAST_NAME) OVER (PARTITION BY JOB_ID ORDER BY SALARY DESC) AS LOWEST_PAID_EMPLOYEE_2
  44. FROM employees
  45. WHERE JOB_ID IN ('FI_ACCOUNT', 'IT_PROG', 'PU_CLERK')
  46. ;
  47.  
  48.  
  49. SELECT
  50.   EMPLOYEE_ID, FIRST_NAME, LAST_NAME, JOB_ID, SALARY,
  51.   FIRST_VALUE(FIRST_NAME ||' '|| LAST_NAME) OVER (PARTITION BY JOB_ID ORDER BY SALARY ASC) AS LOWEST_PAID_EMPLOYEE,
  52.   LAST_VALUE(FIRST_NAME ||' '|| LAST_NAME) OVER (PARTITION BY JOB_ID ORDER BY SALARY DESC ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS LOWEST_PAID_EMPLOYEE_2
  53. FROM employees
  54. WHERE JOB_ID IN ('FI_ACCOUNT', 'IT_PROG', 'PU_CLERK')
  55. ;
  56.  
  57.  
  58. SELECT
  59.   EMPLOYEE_ID, FIRST_NAME, LAST_NAME, JOB_ID, SALARY,
  60.   FIRST_VALUE(FIRST_NAME ||' '|| LAST_NAME) OVER (PARTITION BY JOB_ID ORDER BY SALARY DESC) AS HIGHEST_PAID_EMPLOYEE
  61. FROM employees
  62. WHERE JOB_ID IN ('FI_ACCOUNT', 'IT_PROG', 'PU_CLERK')
  63. ;
  64.  
  65.  
  66. SELECT
  67.   EMPLOYEE_ID, FIRST_NAME, LAST_NAME, JOB_ID, SALARY,
  68.   NTH_VALUE(FIRST_NAME ||' '|| LAST_NAME, 1) OVER (PARTITION BY JOB_ID ORDER BY SALARY DESC) AS HIGHEST_PAID_EMPLOYEE
  69. FROM employees
  70. WHERE JOB_ID IN ('FI_ACCOUNT', 'IT_PROG', 'PU_CLERK')
  71. ;
  72.  
  73.  
  74. SELECT
  75.   EMPLOYEE_ID, FIRST_NAME, LAST_NAME, JOB_ID, SALARY,
  76.   NTH_VALUE(FIRST_NAME ||' '|| LAST_NAME, 2) OVER (PARTITION BY JOB_ID ORDER BY SALARY DESC) AS HIGHEST_PAID_EMPLOYEE
  77. FROM employees
  78. WHERE JOB_ID IN ('FI_ACCOUNT', 'IT_PROG', 'PU_CLERK')
  79. ;
  80.  
  81.  
  82. SELECT
  83.   EMPLOYEE_ID, FIRST_NAME, LAST_NAME, JOB_ID, SALARY,
  84.   NTH_VALUE(FIRST_NAME ||' '|| LAST_NAME, 2) OVER (PARTITION BY JOB_ID ORDER BY SALARY DESC RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS HIGHEST_PAID_EMPLOYEE
  85. FROM employees
  86. WHERE JOB_ID IN ('FI_ACCOUNT', 'IT_PROG', 'PU_CLERK')
  87. ;
  88.  
  89.  
  90. SELECT
  91.   JOB_ID,
  92.   NTH_VALUE(SALARY, 3) OVER (PARTITION BY JOB_ID ORDER BY SALARY DESC RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS HIGHEST_PAID_EMPLOYEE
  93. FROM employees
  94. WHERE JOB_ID IN ('FI_ACCOUNT', 'IT_PROG', 'PU_CLERK')
  95. ;
  96.  
  97.  
  98. SELECT
  99.   DISTINCT JOB_ID,
  100.   NTH_VALUE(SALARY, 3) OVER (PARTITION BY JOB_ID ORDER BY SALARY DESC RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS HIGHEST_PAID_EMPLOYEE
  101. FROM employees
  102. WHERE JOB_ID IN ('FI_ACCOUNT', 'IT_PROG', 'PU_CLERK')
  103. ;
  104.  
  105.  
  106. SELECT
  107.   EMPLOYEE_ID, FIRST_NAME, LAST_NAME, JOB_ID, SALARY,
  108.   LAG(FIRST_NAME, 1) OVER (PARTITION BY JOB_ID ORDER BY SALARY) AS MIN_SALARY
  109. FROM employees
  110. WHERE JOB_ID IN ('FI_ACCOUNT', 'IT_PROG', 'PU_CLERK')
  111. ;
  112.  
  113.  
  114. SELECT
  115.   EMPLOYEE_ID, FIRST_NAME, LAST_NAME, JOB_ID, SALARY,
  116.   LAG(FIRST_NAME, 2) OVER (PARTITION BY JOB_ID ORDER BY SALARY) AS MIN_SALARY
  117. FROM employees
  118. WHERE JOB_ID IN ('FI_ACCOUNT', 'IT_PROG', 'PU_CLERK')
  119. ;
  120.  
  121.  
  122. SELECT
  123.   EMPLOYEE_ID, FIRST_NAME, LAST_NAME, JOB_ID, SALARY,
  124.   LAG(FIRST_NAME, 2, '-') OVER (PARTITION BY JOB_ID ORDER BY SALARY) AS MIN_SALARY
  125. FROM employees
  126. WHERE JOB_ID IN ('FI_ACCOUNT', 'IT_PROG', 'PU_CLERK')
  127. ;
  128.  
  129.  
  130. SELECT
  131.   EMPLOYEE_ID, FIRST_NAME, LAST_NAME, JOB_ID, SALARY,
  132.   LEAD(FIRST_NAME, 2, '-') OVER (PARTITION BY JOB_ID ORDER BY SALARY) AS MAX_SALARY
  133. FROM employees
  134. WHERE JOB_ID IN ('FI_ACCOUNT', 'IT_PROG', 'PU_CLERK')
  135. ;
  136.  
  137.  
  138. SELECT
  139.   EMPLOYEE_ID, FIRST_NAME, LAST_NAME, JOB_ID, SALARY,
  140.   LEAD(FIRST_NAME, 1, '-') OVER (PARTITION BY JOB_ID ORDER BY SALARY) AS MAX_SALARY
  141. FROM employees
  142. WHERE JOB_ID IN ('FI_ACCOUNT', 'IT_PROG', 'PU_CLERK')
  143. ;
  144.  
  145.  
  146. SELECT
  147.   EMPLOYEE_ID, FIRST_NAME, LAST_NAME, JOB_ID, SALARY,
  148.   RATIO_TO_REPORT(SALARY) OVER (PARTITION BY JOB_ID) AS RATIO_SALARY
  149. FROM employees
  150. WHERE JOB_ID IN ('FI_ACCOUNT', 'IT_PROG')
  151. ;
  152.  
  153.  
  154. SELECT
  155.   EMPLOYEE_ID, FIRST_NAME, LAST_NAME, JOB_ID, SALARY,
  156.   RATIO_TO_REPORT(SALARY) OVER (PARTITION BY JOB_ID ORDER BY SALARY) AS RATIO_SALARY
  157. FROM employees
  158. WHERE JOB_ID IN ('FI_ACCOUNT', 'IT_PROG')
  159. ;
  160.  
  161.  
  162. SELECT
  163.   EMPLOYEE_ID, FIRST_NAME, LAST_NAME, JOB_ID, SALARY,
  164.   RATIO_TO_REPORT(SALARY) OVER () AS RATIO_SALARY
  165. FROM employees
  166. WHERE JOB_ID IN ('FI_ACCOUNT', 'IT_PROG')
  167. ;
  168.  
  169.  
  170. SELECT
  171.   EMPLOYEE_ID, FIRST_NAME, LAST_NAME, DEPARTMENT_ID, JOB_ID, SALARY,
  172.   RATIO_TO_REPORT(SALARY) OVER (PARTITION BY DEPARTMENT_ID, JOB_ID) AS RATIO_SALARY
  173. FROM employees
  174. WHERE JOB_ID IN ('FI_ACCOUNT', 'IT_PROG')
  175. ;
  176.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement