แนวคิดนี้ได้รับการอธิบายอย่างดีจากคำตอบที่ยอมรับ แต่ฉันพบว่ายิ่งมีตัวอย่างมากเท่าไหร่ก็ยิ่งดีขึ้นเท่านั้นนี่คือตัวอย่างที่เพิ่มขึ้น
1) บอสพูดว่า "ขอจำนวนสินค้าที่เรามีในสต็อกจัดกลุ่มตามยี่ห้อ"
คุณพูดว่า : "ไม่มีปัญหา"
SELECT 
      BRAND
      ,COUNT(ITEM_ID) 
FROM 
      ITEMS
GROUP BY 
      BRAND;
ผลลัพธ์:
+--------------+---------------+
|  Brand       |   Count       | 
+--------------+---------------+
| H&M          |     50        |
+--------------+---------------+
| Hugo Boss    |     100       |
+--------------+---------------+
| No brand     |     22        |
+--------------+---------------+
2) หัวหน้าบอกว่า "เอารายการสินค้าทั้งหมดมาให้ฉันพร้อมยี่ห้อและจำนวนสินค้าที่แบรนด์นั้นมี"
คุณอาจลอง:
 SELECT 
      ITEM_NR
      ,BRAND
      ,COUNT(ITEM_ID) 
 FROM 
      ITEMS
 GROUP BY 
      BRAND;
แต่คุณจะได้รับ:
ORA-00979: not a GROUP BY expression 
นี่คือที่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     | 
+--------------+---------------+----------+
ฯลฯ ...