在 SQlite 中生成每月汇总值
Generate Monthly Aggregated Values in SQlite
我是 SQLite 的新手,我从事 SQL 查询已有一段时间了。
假设我们有数据库 table 说 tbl_expense 具有以下 table 结构。
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
)
假设我们在 table.
中存储了以下数据
预期输出
假设我们有 expense_date 作为时间戳,我如何编写一个 SQL 查询以产生如下所示的输出。
请帮我解决这个问题。
您需要 LEFT
连接 return 对 table 和条件聚合的所有月份缩写的 cte:
WITH cte(month, month_name) AS (VALUES
('01', 'JAN'), ('02', 'FEB'), ('03', 'MAR'), ('04', 'APR'), ('05', 'MAY'), ('06', 'JUN'),
('07', 'JUL'), ('08', 'AUG'), ('09', 'SEP'), ('10', 'OCT'), ('11', 'NOV'), ('12', 'DEC')
)
SELECT c.month_name,
TOTAL(CASE WHEN expense_type = 'Income' THEN expense_amt END) Income,
TOTAL(CASE WHEN expense_type = 'expense' THEN expense_amt END) Expense
FROM cte c LEFT JOIN tbl_expense e
ON strftime('%m', e.expense_date, 'unixepoch') = c.month
AND strftime('%Y', e.expense_date, 'unixepoch') = strftime('%Y', CURRENT_DATE)
GROUP BY c.month_name
ORDER BY c.month;
条件:
strftime('%Y', e.expense_date, 'unixepoch') = strftime('%Y', CURRENT_DATE)
用于 return 仅当年的结果。
您可以更改它以获得您想要的任何年份的结果,例如:
strftime('%Y', e.expense_date, 'unixepoch') = '2020'
参见demo。
我是 SQLite 的新手,我从事 SQL 查询已有一段时间了。
假设我们有数据库 table 说 tbl_expense 具有以下 table 结构。
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
)
假设我们在 table.
中存储了以下数据预期输出
假设我们有 expense_date 作为时间戳,我如何编写一个 SQL 查询以产生如下所示的输出。
请帮我解决这个问题。
您需要 LEFT
连接 return 对 table 和条件聚合的所有月份缩写的 cte:
WITH cte(month, month_name) AS (VALUES
('01', 'JAN'), ('02', 'FEB'), ('03', 'MAR'), ('04', 'APR'), ('05', 'MAY'), ('06', 'JUN'),
('07', 'JUL'), ('08', 'AUG'), ('09', 'SEP'), ('10', 'OCT'), ('11', 'NOV'), ('12', 'DEC')
)
SELECT c.month_name,
TOTAL(CASE WHEN expense_type = 'Income' THEN expense_amt END) Income,
TOTAL(CASE WHEN expense_type = 'expense' THEN expense_amt END) Expense
FROM cte c LEFT JOIN tbl_expense e
ON strftime('%m', e.expense_date, 'unixepoch') = c.month
AND strftime('%Y', e.expense_date, 'unixepoch') = strftime('%Y', CURRENT_DATE)
GROUP BY c.month_name
ORDER BY c.month;
条件:
strftime('%Y', e.expense_date, 'unixepoch') = strftime('%Y', CURRENT_DATE)
用于 return 仅当年的结果。
您可以更改它以获得您想要的任何年份的结果,例如:
strftime('%Y', e.expense_date, 'unixepoch') = '2020'
参见demo。