2024-07-28|閱讀時間 ‧ 約 26 分鐘

SQL語法 - GROUP BY / HAVING

    ※ GROUP BY

    用於將數據表中的數據按照一個或多個列進行分組。例如在處理一個表格的資料時,可以指定欄位,一個或是多個,然後把將其視為ID進行分組處理。

    ※ 語法

    SELECT column1, column2, ..., aggregate_function(column)
    FROM table_name
    GROUP BY column1, column2, ...;

    //​aggregate_function(column)可以是聚合函數,
    //如SUM(column)、COUNT(column)、AVG(column)、MAX(column)或MIN(column)等

    ※ 解析順序

    raw-image

    先用WHERE篩選出我們想要的記錄,再用SELECT篩選出我們需要的欄位。接著,GROUP BY做分組處理。如果我們想要對所有結果進行排序,我們會在GROUP BY之後使用ORDER BY子句來排序。

    ※ 實例

    • Aggregate function(聚合函數):用於對同一個群組中的所有記錄,進行數據分析和統計計算的函數的一個函式。

    常見的聚合函數包括:

    1. AVG :計算某列的平均值
    2. COUNT :計算某列的行數
    3. MAX:找出某列的最大值
    4. MIN: 找出某列的最小值
    5. SUM:計算某列的總和
    • 計算每個產品的總銷售量,可以使用SUM()GROUP BY來達成:
    SELECT ProductID, SUM(Sales)
    FROM SalesRecords
    GROUP BY ProductID;

    • Expression(表達式):指的是一個可以產生值的語句。這個語句可以包含變量、常數、運算符和函數。例如針對欄位做加減乘除的處裡。

    SELECT (Price * Quantity) AS TotalCost
    FROM OrderDetails;
    //將Price欄位和Quantity欄位的值相乘,然後將結果作為TotalCost返回。​

    ※ HAVING

    通常與GROUP BY子句一起使用,根據指定的條件將分組查詢的結果進行過濾。

    ※ 語法


    ※ 解析順序

    操作的順序是先GROUP BY把record做分組,然後進行Aggregate function(聚合函數)運算,最後使用HAVING進行篩選。

    SELECT Department, COUNT(EmployeeID) as EmployeeCount
    FROM Employees
    GROUP BY Department
    HAVING COUNT(EmployeeID) > 5;
    //將員工按照部門分組,然後計算每個部門的員工數量。HAVING子句過濾出員工數量大於5的部門

    ※ HAVING 和 WHERE 的不同

    • HAVING:會在Aggregate function(聚合函數)運算後對結果進行過濾,篩選的對象是group
    • WHERE:會在GROUP BY之前先對數據進行過濾,篩選的對象是record


    分享至
    成為作者繼續創作的動力吧!
    © 2024 vocus All rights reserved.