Ключевое слово Oracle "Разделение по"

Эта концепция очень хорошо sql-syntax объясняется принятым ответом, но sql-syntax я считаю, что чем больше sql-statement примеров вы видите, тем лучше sql-statement они понимаются. Вот пример select-statement постепенного увеличения:

1) Начальник сказал: «Получите sql-statement количество товаров, которые sql-query у нас есть на складе, сгруппированные sql-query по брендам»

Вы говорите: «нет проблем»

SELECT 
      BRAND
      ,COUNT(ITEM_ID) 
FROM 
      ITEMS
GROUP BY 
      BRAND;

Результат:

+--------------+---------------+
|  Brand       |   Count       | 
+--------------+---------------+
| H&M          |     50        |
+--------------+---------------+
| Hugo Boss    |     100       |
+--------------+---------------+
| No brand     |     22        |
+--------------+---------------+

2) Начальник говорит: «А sql-statement теперь дайте мне список всех select-statement товаров с указанием их бренда analytic-functions И количества товаров соответствующего sql-statement бренда»

Вы можете попробовать:

 SELECT 
      ITEM_NR
      ,BRAND
      ,COUNT(ITEM_ID) 
 FROM 
      ITEMS
 GROUP BY 
      BRAND;

Но oracle вы получаете:

ORA-00979: not a GROUP BY expression 

Вот где появляется sql-query OVER (PARTITION BY BRAND):

 SELECT 
      ITEM_NR
      ,BRAND
      ,COUNT(ITEM_ID) OVER (PARTITION BY BRAND) 
 FROM 
      ITEMS;

Что означает:

  • COUNT(ITEM_ID) - получить количество элементов
  • OVER - По набору строк.
  • (PARTITION BY BRAND) - одного бренда

И результат:

+--------------+---------------+----------+
|  Items       |  Brand        | Count()  |
+--------------+---------------+----------+
|  Item 1      |  Hugo Boss    |   100    | 
+--------------+---------------+----------+
|  Item 2      |  Hugo Boss    |   100    | 
+--------------+---------------+----------+
|  Item 3      |  No brand     |   22     | 
+--------------+---------------+----------+
|  Item 4      |  No brand     |   22     | 
+--------------+---------------+----------+
|  Item 5      |  H&M          |   50     | 
+--------------+---------------+----------+

и sql-query т. д.

sql

oracle

window-functions

2022-11-13T21:26:40+00:00