CodeGym /課程 /SQL SELF /建立基本報表

建立基本報表

SQL SELF
等級 59, 課堂 2
開放

在你還沒被 SQL 語法和變數搞混之前,先記住:聚合函數就是你在統計各種東西時的好夥伴。它們可以幫你算總數、平均值,還能在一堆資料裡做出各種魔法。

聚合函數就是拿來對一群資料列做數學運算的。最常用的有:

  • SUM():計算數值的總和。
  • AVG():算平均值。
  • COUNT():算出查詢結果有幾筆資料。

聚合函數超級適合你在處理大量資料時,想要快速得到重點報表:像是你有幾張訂單、總金額多少,或是今天最大的一筆消費是多少。 來看看幾個常用的聚合函數吧。

計算資料列數量:COUNT() 函數

COUNT() 這個函數可以幫你算出資料表裡有幾筆資料。來看幾個例子。

-- 簡單計算訂單表裡的所有資料筆數
SELECT COUNT(*) AS total_orders
FROM orders;

-- 計算不重複的客戶數量
SELECT COUNT(DISTINCT customer_id) AS unique_customers
FROM orders;

-- 計算金額大於 100 的訂單數量
SELECT COUNT(*) AS high_value_orders
FROM orders
WHERE total_amount > 100;

COUNT() 很常用來算資料筆數、獨特值,或是搭配條件過濾,比如「有多少學生報名了 Python 課程」。

加總資料:SUM() 函數

SUM() 這個函數會把某個欄位的數值全部加起來。來算算所有客戶的購買總金額吧。

-- 計算總營收
SELECT SUM(total_amount) AS total_revenue
FROM orders;

-- 計算某個客戶的總消費
SELECT SUM(total_amount) AS customer_spending
FROM orders
WHERE customer_id = 101;

-- 依照分類計算訂單總金額
SELECT category, SUM(total_amount) AS category_revenue
FROM orders
GROUP BY category;

SUM() 是你分析銷售、營收或任何總和時的主力工具。比如你想知道商辦大樓上個月的收入?超簡單。

平均值:AVG() 函數

AVG() 可以幫你算出一堆資料的平均值。像是學生的平均分數,或是客戶的平均消費金額。

-- 計算訂單的平均金額
SELECT AVG(total_amount) AS average_order_value
FROM orders;

-- 依照分類計算訂單平均金額
SELECT category, AVG(total_amount) AS average_order_value
FROM orders
GROUP BY category;

-- 計算最近 7 天客戶的平均消費
SELECT AVG(total_amount) AS avg_check_last_week
FROM orders
WHERE order_date >= NOW() - INTERVAL '7 days';

平均值很適合用來分析服務品質、找出異常,或是算出像「每個客戶平均帶來多少利潤」這種關鍵指標。

聚合函數在分析裡的應用

現在你已經認識這些基本函數了,來看看怎麼用它們做出基本的分析報表。

範例 1:總營收和訂單數量

假設你想知道這個月有多少訂單,總共賺了多少錢。

SELECT
    COUNT(*) AS total_orders,
    SUM(total_amount) AS total_revenue
FROM orders
WHERE order_date >= '2023-10-01' AND order_date <= '2023-10-31';

範例 2:依分類計算平均營收

如果你想要把營收依照商品分類來拆開看呢?

SELECT
    category,
    COUNT(*) AS total_orders,
    SUM(total_amount) AS total_revenue,
    AVG(total_amount) AS avg_order_value
FROM orders
GROUP BY category;

範例 3:最近 7 天的訂單

有時候你會想分析短期的數據,比如最近一週的狀況。

SELECT
    COUNT(*) AS orders_last_week,
    SUM(total_amount) AS revenue_last_week,
    AVG(total_amount) AS avg_check_last_week
FROM orders
WHERE order_date >= NOW() - INTERVAL '7 days';

實戰案例與具體任務

任務:依地區分析銷售

假設你是連鎖店老闆,想要分析各地區的營收分布。

SELECT
    region,
    COUNT(*) AS total_orders,
    SUM(total_amount) AS total_revenue,
    AVG(total_amount) AS average_order_value
FROM orders
GROUP BY region
ORDER BY total_revenue DESC;

任務:營收前 10 名的客戶

現在來點進階的,找出總消費金額前 10 名的客戶。

SELECT
    customer_id,
    SUM(total_amount) AS total_spending
FROM orders
GROUP BY customer_id
ORDER BY total_spending DESC
LIMIT 10;

任務:比較每週不同天的營收

想知道你生意哪一天最賺嗎?來看個例子:

SELECT
    TO_CHAR(order_date, 'Day') AS day_of_week,
    SUM(total_amount) AS total_revenue,
    AVG(total_amount) AS avg_order_value
FROM orders
GROUP BY TO_CHAR(order_date, 'Day')
ORDER BY total_revenue DESC;
2
任務
SQL SELF, 等級 59, 課堂 2
上鎖
分析最近30天的平均營收
分析最近30天的平均營收
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION