SQLite:使用公共引用 ID 从两个表中获取输出

SQLite: Get Output From Two Tables Using Common Reference ID

我是 SQLite 的新手,我已经研究一个问题很长时间了。

假设我们有 2 个数据库 table 说 tbl_expense 和 tbl_category。请在下面找到以下 table 结构。

tbl_category

CREATE TABLE IF NOT EXISTS tbl_category(
     category_id INTEGER PRIMARY KEY AUTOINCREMENT, 
     category_name VARCHAR(20) DEFAULT NULL, 
     category_desc VARCHAR(500) DEFAULT NULL,
     category_icon VARCHAR(100) DEFAULT NULL, 
     category_created timestamp default CURRENT_TIMESTAMP
)

tbl_expense

CREATE TABLE IF NOT EXISTS tbl_expense(
     expense_id INTEGER PRIMARY KEY AUTOINCREMENT, 
     expense_name VARCHAR(20) DEFAULT NULL, 
     expense_desc VARCHAR(500) DEFAULT NULL, 
     expense_type VARCHAR(20) DEFAULT NULL, 
     expense_amt DECIMAL(6.3) DEFAULT NULL, 
     expense_date TIMESTAMP DEFAULT NULL, 
     expense_category INTEGER DEFAULT NULL,
     expense_created_date timestamp DEFAULT CURRENT_TIMESTAMP,
     FOREIGN KEY (expense_category) REFERENCES tbl_category(category_id)
     ON DELETE SET NULL
)

假设我们有如下 table 中的数据。

预期输出:

确保我们有 category_idexpense_category 作为公共字段。我如何创建一个 SQL 查询,我可以在其中列出所有类别及其费用金额的总和,如下所示。

请帮我解决这个问题。

您需要 INNER 连接 table 和聚合:

SELECT c.category_name Category,
       SUM(e.expense_amt) Amount
FROM tbl_category c INNER JOIN tbl_expense e
ON e.expense_category = c.category_id
GROUP BY c.category_id;

如果您想要 table tbl_category 中的所有类别,甚至 tbl_expense 中不存在的类别,请使用 LEFT 连接和 TOTAL()聚合函数:

SELECT c.category_name Category,
       TOTAL(e.expense_amt) Amount
FROM tbl_category c LEFT JOIN tbl_expense e
ON e.expense_category = c.category_id
GROUP BY c.category_id;