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