需要使用 SQL 的 RANK() 或 ROW_NUMBER() 窗口函數來為每個月份的ATM交易次數排名。然後,我們可以從排名中篩選出前三名,並計算每個ATM在對應月份的交易總金額。
以下是可能的SQL查詢語句:
WITH RankedATMs AS (
SELECT
ATM代號,
DATEPART(MONTH, 交易日期) AS 月份,
COUNT(*) AS 交易次數,
SUM(交易金額) AS 當月交易總金額,
RANK() OVER (PARTITION BY DATEPART(MONTH, 交易日期) ORDER BY COUNT(*) DESC) AS 排名
FROM
ATM_TRANS
WHERE
DATEPART(YEAR, 交易日期) = 2020
GROUP BY
ATM代號,
DATEPART(MONTH, 交易日期)
)
SELECT
ATM代號,
月份,
交易次數,
當月交易總金額
FROM
RankedATMs
WHERE
排名 <= 3
ORDER BY
月份,
排名;
這個查詢語句做了以下幾步操作:
首先,我們創建了一個公用表運算式(CTE)RankedATMs,它會選擇ATM代號、月份、交易次數以及當月交易總金額,並且使用 RANK() 函數按每個月的交易次數給ATM代號排名。
在 WHERE 子句中,我們篩選出了2020年的記錄。
我們使用 GROUP BY 對ATM代號和月份進行了分組,以便計算每個月每臺ATM的交易次數和總金額。
最後,在外層的 SELECT 中,我們從CTE中選擇月份、ATM代號、交易次數和當月交易總金額,但僅限於排名前三的記錄。
我們按月份和排名順序對結果進行了排序。
請根據你資料庫中實際的表格結構和字段名稱調整上述查詢語句。