首页 > 解决方案 > 用另一个表的总和更新表中的列

问题描述

我对 SQL 比较陌生,无法解决以下问题。

简而言之,我有两张桌子。我们可以调用第一个表people

name
--------
Margaret
Jim
Lola

第二个是expenses与不同实体关联的不同类型的列表:

name     | type     | amount
---------+----------+-------
Margaret | personal |    100
Jim      | business |     50
Lola     | business |    275
Margaret | business |     75
Lola     | personal |     10
Margaret | business |    150
Lola     | personal |     50
Jim      | business |    150

我想在第一个表中添加两列,使其看起来像这样:

name     | personal_expenses | business_expenses
---------+-------------------+------------------
Margaret |               100 |               275
Jim      |                 0 |               200
Lola     |               275 |                60

personal_expenses最初,我希望在添加andbusiness_expenses列之后,我能够使用以下查询来完成此操作:

UPDATE people
SET personal_expenses = (
    SELECT SUM(amount)
    FROM expenses
    GROUP BY name
);

我也试过:

UPDATE people
SET personal_expenses = (
    SELECT SUM(amount)
    FROM expenses
    WHERE expenses.name = people.name
);

但同样无济于事。

我已经查看了类似问题的几个答案 但是当我尝试(诚然,也许是错误的)复制它们时,我得到(非常无信息的)语法错误。sqlite3

实现这一分类总和的正确方法是什么sqlite3

标签: sqlitesql-update

解决方案


你很亲近!你在你的WHERE条款中又忘记了一个条件。expense根据您在表格中提供的示例数据,您示例中的总和也不正确

ALTER TABLE `people` ADD COLUMN `personal_expense` INTEGER;
ALTER TABLE `people` ADD COLUMN `business_expense` INTEGER;

UPDATE people
SET personal_expense = (
      SELECT SUM(amount)
      FROM expenses
      WHERE expenses.type = 'personal'
        AND expenses.name = people.name ),

    business_expense = (
      SELECT SUM(amount)
      FROM expenses
      WHERE expenses.type = 'business'
        AND expenses.name = people.name )

推荐阅读