返回

透过LEFT JOIN统计,展现左右存在的痕迹

后端

在企业管理中,收款情况的统计与分析对企业经营至关重要。企业表中记录了企业的相关信息,如企业名称、企业地址等;而收款表中记录了企业收到的款项,如收款时间、收款金额等。通过将这两个表关联起来,可以统计出哪些企业已经收款,收款金额是多少。

常用的关联操作为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操作可以有效地统计出左右两表中均存在的数据,为企业收款情况的汇总提供了有效的数据支撑。