![](/img/trans.png)
[英]I have this query to get statistics, but it takes more than 10 seconds to return results from 1M records. how I can optimize it?
[英]How do I return records where the sum of a column that corresponds to a specific user ID is greater than 1M?
我的情況如下 -
我的數據庫表中有這些記錄(表名:MyTable):
ID ACCOUNT_NUM DATE BALANCE
------------------------------------ ----------- ---------- -----------
111 1 2020-12-17 500000.0000
111 2 2020-12-17 500000.0000
222 1 2020-12-17 500000.0000
222 2 2020-12-17 400000.0000
333 1 2020-12-17 800000.0000
333 2 2020-12-17 300000.0000
444 1 2020-12-17 1000000.0000
444 2 2020-12-17 100.0000
每個 ID 代表一個成員,每個成員有 2 個帳戶。
通過為每個 ID 添加帳戶 1 和 2,我只需要返回總余額超過 1000000.00 (1M) 的記錄。
到目前為止,我已經嘗試過:
SELECT ID, ACCOUNT_NUM, DATE, BALANCE FROM MyTable
GROUP BY ID, ACCOUNT_NUM, DATE, BALANCE
HAVING SUM(BALANCE) >= '1000000.00';
但它只返回 ID 444 的單個記錄,其中帳戶 1 余額 = 1M。
如何獲取每個成員對 SUM 帳戶 1 和 2 的查詢並在超過 1M 時返回?
SQL 的新功能。 如果我需要添加更多信息,請告訴我。
提前致謝
使用 window 函數:
SELECT ID, ACCOUNT_NUM, DATE, BALANCE
FROM (SELECT t.*,
SUM(BALANCE) OVER (PARTITION BY ID, ACCOUNT_NUM, DATE) as SUM_BALANCE
FROM MyTable t
) t
WHERE SUM_BALANCE >= 1000000.00;
您的問題表明您只想按account_num
求和,但您當前的邏輯包括其他列。 我基本上已經包含了您當前的邏輯-盡管包含BALANCE
沒有意義,因為這就是您要添加的內容。
使用子查詢來應用必要的條件。 在此示例中,當評估表中的每一行(別名為“t1”)時,它將檢查表中所有記錄的總和(別名為“t2”,通過子查詢)具有相同的“標識”值
SELECT ID, ACCOUNT_NUM, DATE, BALANCE FROM MyTable t1
WHERE
(
SELECT SUM(BALANCE) FROM MyTable t2
WHERE t2.ID = t1.ID
) > 1000000.00
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.