如何解答 LeetCode 1193
发布: (2026年1月16日 GMT+8 04:45)
2 min read
原文: Dev.to
Source: Dev.to
问题描述
表 Transactions 包含以下列:
id(主键)countrystate(枚举:'approved'或'declined')amounttrans_date
我们需要返回每个 月份‑年份 和 国家 的以下聚合结果(顺序不固定):
month– 格式为YYYY-MMtrans_count– 交易总数approved_count– 已批准的交易数trans_total_amount– 所有交易金额的总和approved_total_amount– 已批准交易金额的总和
思路
- 分组 – 按
trans_date提取的月份‑年份以及country对行进行分组。 - 聚合 –
COUNT(id)计算交易总数。SUM(amount)计算交易金额总和。- 对于仅已批准的指标,使用
CASE表达式放在SUM中:- 当
state = 'approved'时返回1(或amount),否则返回0。
- 当
- 月份格式化 – 在 PostgreSQL 中,
TO_CHAR(trans_date, 'YYYY-MM')将日期转换为所需的YYYY-MM字符串。
SQL 查询
SELECT
TO_CHAR(trans_date, 'YYYY-MM') AS month,
country AS country,
COUNT(id) AS trans_count,
SUM(
CASE
WHEN "state" = 'approved' THEN 1
ELSE 0
END
) AS approved_count,
SUM(amount) AS trans_total_amount,
SUM(
CASE
WHEN "state" = 'approved' THEN amount
ELSE 0
END
) AS approved_total_amount
FROM Transactions
GROUP BY TO_CHAR(trans_date, 'YYYY-MM'), country;