如何解答 LeetCode 1193

发布: (2026年1月16日 GMT+8 04:45)
2 分钟阅读
原文: Dev.to

Source: Dev.to

问题描述

Transactions 包含以下列:

  • id(主键)
  • country
  • state(枚举:'approved''declined'
  • amount
  • trans_date

我们需要返回每个 月份‑年份国家 的以下聚合结果(顺序不固定):

  • month – 格式为 YYYY-MM
  • trans_count – 交易总数
  • approved_count – 已批准的交易数
  • trans_total_amount – 所有交易金额的总和
  • approved_total_amount – 已批准交易金额的总和

思路

  1. 分组 – 按 trans_date 提取的月份‑年份以及 country 对行进行分组。
  2. 聚合
    • COUNT(id) 计算交易总数。
    • SUM(amount) 计算交易金额总和。
    • 对于仅已批准的指标,使用 CASE 表达式放在 SUM 中:
      • state = 'approved' 时返回 1(或 amount),否则返回 0
  3. 月份格式化 – 在 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;
Back to Blog

相关文章

阅读更多 »

SQLite 中的系统事务到用户事务

用户事务:逃离自动提交 默认情况下,SQLite 运行在 autocommit 模式。每个非 SELECT 语句都会被包装在它自己的事务中:!Autocommit tr...