Leetcode 解鎖 - Monthly Transactions I

閱讀時間約 8 分鐘
請在表1查找每個月份和國家的交易數量及其總金額、已批准交易的數量及其總金額(如表2),結果可以以任何順序返回。

請使用下列三種語法查找:

1. MS SQL Server 查詢

2. MySQL 查詢

3. Pandas 查詢

表1

表1

表2

表2




SQL

兩大重點 -

  1. 如何將trans_date,轉成YYYY-MM格式:

FORMAT() 函數是 SQL Server 中用來格式化數據的工具。它允許你指定日期、時間或數字的顯示格式。以下是一些常用的日期和時間格式化字符串:

raw-image

在 MySQL 中,可以使用 DATE_FORMAT() 函數來格式化日期和時間。這個函數的功能類似於 SQL Server 的 FORMAT() 函數。以下是常見的格式化符號:

raw-image


  1. 如何在條件式計算count和sum:

在 SQL 中,SUM(CASE WHEN ... THEN ... ELSE ... END) 可以用來實現條件式計算的常見方法。這種結構可以用來計算符合特定條件的數據的總和或計數。我們也可以用IIF(MYSQL: IF)來取代CASE WHEN,來達到條件計算。


以下是MS SQL Sever和MYSQL的程式碼:

//MS SQL Sever
//CASE WHEN
SELECT
FORMAT(trans_date, 'yyyy-MM') AS month,
country,
COUNT(*) 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
FORMAT(trans_date, 'yyyy-MM'),
country;

//IIF
SELECT
FORMAT(trans_date, 'yyyy-MM') AS month,
country,
COUNT(*) AS trans_count,
SUM(IIF(state = 'approved', 1, 0)) 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
FORMAT(trans_date, 'yyyy-MM'),
country;
//MYSQL Sever
//CASE WHEN
SELECT
DATE_FORMAT(trans_date, '%Y-%m') AS month,
country,
COUNT(*) 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
month, country;

//IF
SELECT
DATE_FORMAT(trans_date, '%Y-%m') AS month,
country,
COUNT(*) AS trans_count,
SUM(IF(state = 'approved', 1, 0)) AS approved_count,
SUM(amount) AS trans_total_amount,
SUM(IF(state = 'approved', amount, 0)) AS approved_total_amount
FROM
Transactions
GROUP BY
month, country;



Python
  1. 將 trans_date 轉換為 datetime 格式,並使用.to_period("M")產生新的欄位月份
  2. 分組groupby計算: 使用 groupby(['month', 'country']) 按月份國家進行分組,然後使用 agg() 函數來計算每組的交易數量、已批准交易的數量、交易總金額和已批准交易的總金額
  3. 使用lambda處理條件(state = 'approved')



以下是Python 的程式碼:

import pandas as pd

transactions['trans_date'] = pd.to_datetime(transactions['trans_date'])
transactions['month'] = transactions['trans_date'].dt.to_period('M')


result = transactions.groupby(['month', 'country']).agg(
trans_count=('id', 'count'),
approved_count=('id', lambda x: x[transactions.loc[x.index, 'state'] == 'approved'].count()),
trans_total_amount=('amount', 'sum'),
approved_total_amount=('amount', lambda x: x[transactions.loc[x.index, 'state'] == 'approved'].sum())
).reset_index()


result['month'] = result['month'].astype(str)



謝謝您花時間將此篇文章讀完,若覺得對您有幫助可以幫忙按個讚、分享來或是珍藏喔!也歡迎Follow我的Threads,持續追蹤生產力工具、商業分析、商業英文,提升自己的職場力喔!





我們秉持著從原人進化的精神,不斷追求智慧的累積和工具的運用來提升生產力。我們相信,每一個成員都擁有無限的潛力,透過學習和實踐,不斷成長和進步。
留言0
查看全部
發表第一個留言支持創作者!
zip()是 Python 的一個內建函數,用於將多個可迭代物件中的元素配對成元素組,本篇我們會來討論zip() 的主要用法。
Notion 是一款強大的生產力工具,幫助我們紀錄、組織和管理訊息,並把這些訊息存取至資料庫(Notion 解鎖 - Threads 串文資料庫)。 當我們需要對這些數據進行進一步的分析時,有沒有什麼程式工具是我們可以使用,進一步釋放Notion的潛力呢? 在本篇文章中,我將介紹我如何在Not
下表中包含了20筆訂單的營業額數據。現在需要篩選出營業額大於 $1,000,000 的訂單,並根據金額從高到低進行排序。請使用下列軟體工具分別找出答案
在此篇中,我們來拿實務的例子作實戰練習,我們會討論如何在Google Colab的環境下,撈取所有台美股的股票代碼,並獲取相關細節,最後將獲取的資訊存取於SQLite資料庫中。
你是否曾使用Python進行網上爬蟲、撈取資料、分析,並將結果存進雲端資料庫? 你知道這一切可以全部發生在Google Drive裡嗎?而且,全部都是免費的!
zip()是 Python 的一個內建函數,用於將多個可迭代物件中的元素配對成元素組,本篇我們會來討論zip() 的主要用法。
Notion 是一款強大的生產力工具,幫助我們紀錄、組織和管理訊息,並把這些訊息存取至資料庫(Notion 解鎖 - Threads 串文資料庫)。 當我們需要對這些數據進行進一步的分析時,有沒有什麼程式工具是我們可以使用,進一步釋放Notion的潛力呢? 在本篇文章中,我將介紹我如何在Not
下表中包含了20筆訂單的營業額數據。現在需要篩選出營業額大於 $1,000,000 的訂單,並根據金額從高到低進行排序。請使用下列軟體工具分別找出答案
在此篇中,我們來拿實務的例子作實戰練習,我們會討論如何在Google Colab的環境下,撈取所有台美股的股票代碼,並獲取相關細節,最後將獲取的資訊存取於SQLite資料庫中。
你是否曾使用Python進行網上爬蟲、撈取資料、分析,並將結果存進雲端資料庫? 你知道這一切可以全部發生在Google Drive裡嗎?而且,全部都是免費的!
你可能也想看
Google News 追蹤
Thumbnail
本月交易日誌紀錄,主要為情緒與交易紀錄,同時公開分享給有興趣的交易者,同時也很歡迎交流。
Thumbnail
2024/07月的投資紀錄,包含股數變化、及本期損益等等。
Thumbnail
※ 語法 SELECT select_list FROM table_name​ ※ 解析順序 From:從哪裡拿? SELECT:要 "拿什麼" 資料? ※ 使用場景: Single column(單一欄位): Multiple column(多個欄位): All colu
Thumbnail
本月交易日誌紀錄,主要為情緒與交易紀錄,同時公開分享給有興趣的交易者,同時也很歡迎交流。
Thumbnail
2024/06月的投資紀錄,包含股數變化、及本期損益等等。
Thumbnail
上一篇提到,6月3日的兩筆利息收入,其中有一筆的數字對不起來,現在終於搞懂了。
Thumbnail
1.系統開發與創作 1.1「精明管家系統」的「儀表板」功能微調: 排序:除了一個自訂順序的欄位 seq 以外,可以依照「當日漲幅」「持有市值」和「當天損益」等三個欄位排序,點一下欄位標題可正序,倒序切換。 1.2 系統經歷跨年考驗 年度第一個交易日,「儀表板」中未正確抓到「昨日收盤」,所以當
Thumbnail
題目敘述 題目會給我們兩張資料表,第一張是Sales,第二張是Product。 第一張是Sales表格,裡面分別有sale_id、 product_id、year、quantity、price等欄位。其中(sale_id、 product_id)做為複合主鍵Primary key Table:
Thumbnail
本月交易日誌紀錄,主要為情緒與交易紀錄,同時公開分享給有興趣的交易者,同時也很歡迎交流。
Thumbnail
2024/07月的投資紀錄,包含股數變化、及本期損益等等。
Thumbnail
※ 語法 SELECT select_list FROM table_name​ ※ 解析順序 From:從哪裡拿? SELECT:要 "拿什麼" 資料? ※ 使用場景: Single column(單一欄位): Multiple column(多個欄位): All colu
Thumbnail
本月交易日誌紀錄,主要為情緒與交易紀錄,同時公開分享給有興趣的交易者,同時也很歡迎交流。
Thumbnail
2024/06月的投資紀錄,包含股數變化、及本期損益等等。
Thumbnail
上一篇提到,6月3日的兩筆利息收入,其中有一筆的數字對不起來,現在終於搞懂了。
Thumbnail
1.系統開發與創作 1.1「精明管家系統」的「儀表板」功能微調: 排序:除了一個自訂順序的欄位 seq 以外,可以依照「當日漲幅」「持有市值」和「當天損益」等三個欄位排序,點一下欄位標題可正序,倒序切換。 1.2 系統經歷跨年考驗 年度第一個交易日,「儀表板」中未正確抓到「昨日收盤」,所以當
Thumbnail
題目敘述 題目會給我們兩張資料表,第一張是Sales,第二張是Product。 第一張是Sales表格,裡面分別有sale_id、 product_id、year、quantity、price等欄位。其中(sale_id、 product_id)做為複合主鍵Primary key Table: