如何解答 LeetCode 1193

发布: (2026年1月16日 GMT+8 04:45)
2 min read
原文: 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

相关文章

阅读更多 »

理解数据库模型:DDIA 第2章

概述 本章节摘自《Designing Data‑Intensive Applications》,探讨了不同的数据库模型以及构建应用数据的策略。了解……

数据库事务

事务是 SQL 数据库工作方式的基础。每天都有数万亿次事务执行,遍布依赖 SQL 的数千个应用程序。