MySQL 左连接中的 Sum 函数

MySQL 左连接中的 Sum 函数

在本文中,我们将介绍 MySQL 左连接中的 Sum 函数。首先让我们回顾一下什么是左连接。

阅读更多:MySQL 教程

左连接(Left Join)

左连接是 SQL 中的一种连接方式。它从左边的表中获取所有的行,如果另一个表中有匹配的数据,则显示匹配的数据,否则显示 NULL 值。

左连接的语法如下:

SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name = table2.column_name;

例如,我们有两个表,一个是学生表,包含姓名和 ID,另一个是成绩表,包含 ID 和 分数。如果我们要列出所有学生的姓名和成绩,即使成绩表中没有该学生的成绩,我们可以使用左连接:

SELECT students.name, scores.score
FROM students
LEFT JOIN scores
ON students.id = scores.id;

Sum 函数

Sum 函数是 SQL 中的一个聚合函数,用于计算指定列的总和。

Sum 函数的语法如下:

SELECT SUM(column_name)
FROM table_name;

例如,如果我们要计算成绩表中所有学生的总分数,我们可以使用 Sum 函数:

SELECT SUM(score)
FROM scores;

左连接中的 Sum 函数

现在让我们把左连接和 Sum 函数合并起来。假设我们有一个商品表和一个订单表,我们想知道每个商品的总销售额,即使没有订单。我们可以使用左连接和 Sum 函数来完成这个任务:

SELECT products.name, SUM(orders.quantity * orders.price) AS total_sales
FROM products
LEFT JOIN orders
ON products.id = orders.product_id
GROUP BY products.name;

在这个查询中,我们将商品表与订单表左连接,然后使用 Sum 函数和 GROUP BY 子句计算每个商品的总销售额。

如果我们想知道每个商品在每个月的销售额,即使该月没有订单,我们可以将左连接和 Sum 函数放在子查询中,并使用外部查询中的 GROUP BY 子句和日期函数来分组:

SELECT products.name, date_format(dates.date, '%Y-%m') AS month, COALESCE(sales.total_sales, 0) AS total_sales
FROM products
CROSS JOIN (
    SELECT DISTINCT date_format(created_at, '%Y-%m') AS date
    FROM orders
) AS dates
LEFT JOIN (
    SELECT product_id, date_format(created_at, '%Y-%m') AS month, SUM(quantity * price) AS total_sales
    FROM orders
    GROUP BY product_id, month
) AS sales
ON products.id = sales.product_id AND dates.date = sales.month
GROUP BY products.name, dates.date;

这个查询中,我们使用 CROSS JOIN 和子查询生成包含每个月的日期的行,并使用左连接和 Sum 函数计算每个商品在每个月的总销售额。我们使用 COALESCE 函数将 NULL 值替换为零,以便我们在结果中看到商品在每个月的销售额。

总结

在本文中,我们介绍了 MySQL 左连接和 Sum 函数,并展示了如何在左连接中使用 Sum 函数来计算总销售额。我们还展示了如何计算每个商品在每个月的销售额,即使该月没有销售记录。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程