返回
透过LEFT JOIN统计,展现左右存在的痕迹
后端
2023-09-22 11:36:29
在企业管理中,收款情况的统计与分析对企业经营至关重要。企业表中记录了企业的相关信息,如企业名称、企业地址等;而收款表中记录了企业收到的款项,如收款时间、收款金额等。通过将这两个表关联起来,可以统计出哪些企业已经收款,收款金额是多少。
常用的关联操作为LEFT JOIN,它可以将左表的所有记录与右表中匹配的记录关联起来,即使右表中没有匹配的记录,也保留左表中的记录。这种方式有助于我们完整地统计出所有企业的收款情况。
-- 企业表
CREATE TABLE t_company (
id INT PRIMARY KEY,
name VARCHAR(255) NOT NULL
);
-- 收款表
CREATE TABLE t_collection (
id INT PRIMARY KEY,
accout INT NOT NULL,
payment_time TIMESTAMP NOT NULL,
amount DECIMAL(10, 2) NOT NULL,
company_id INT REFERENCES t_company(id)
);
-- 插入数据
INSERT INTO t_company (id, name) VALUES
(1, '腾讯'),
(2, '百度');
INSERT INTO t_collection (id, accout, payment_time, amount, company_id) VALUES
(1, 123456, '2023-02-15 12:00:00', 1000.00, 1),
(2, 234567, '2023-03-08 15:30:00', 2000.00, 2),
(3, 345678, '2023-04-12 18:00:00', 3000.00, 1);
-- 使用 LEFT JOIN 统计收款情况
SELECT
c.id AS company_id,
c.name AS company_name,
COALESCE(SUM(t.amount), 0) AS total_amount
FROM
t_company c
LEFT JOIN
t_collection t ON c.id = t.company_id
GROUP BY
c.id, c.name
ORDER BY
c.id;
查询结果为:
+-----------+-------------+--------------+
| company_id | company_name | total_amount |
+-----------+-------------+--------------+
| 1 | 腾讯 | 4000.00 |
| 2 | 百度 | 2000.00 |
+-----------+-------------+--------------+
由此可见,LEFT JOIN操作可以有效地统计出左右两表中均存在的数据,为企业收款情况的汇总提供了有效的数据支撑。