[英]Grouping and joining rows in same table - SQLite
我有一個表,用於存儲 double 值、int 類型(0 或 1)和另一個整數列,用於在 unixepoch 中存儲時間戳。
我想獲得每個月類型總和的差異。 但是我想不出連接行的方法,因為連接條件基於按值分組。
我可以通過運行以下查詢獲得每個月每種類型的總和。
SELECT strftime('%Y-%m', date(dt/1000, 'unixepoch')) AS groupDate, ty, SUM(am) AS total
FROM tr
WHERE (dt BETWEEN 1621185800000 AND 1625077799000) AND ty IN (1, 0)
GROUP BY strftime('%Y-%m', date(dt/1000, 'unixepoch')), ty
2021-05 0 1200.0 <- Difference of this
2021-05 1 500.0 <- and this in a single row like 2021-05 700.0
2021-06 0 2500.0
2021-06 1 150.0
但我想得到這樣的輸出。 我可以在應用程序層處理上述內容並獲得所需的輸出。 但我想知道有什么方法可以從數據庫本身獲取,因為它會更高效和健壯。
2021-05 700.0
2021-06 2350.0
謝謝。
您可以像這樣使用條件聚合:
SELECT strftime('%Y-%m', date(dt/1000, 'unixepoch')) AS groupDate,
SUM(CASE WHEN ty = 0 THEN am ELSE - am END) AS total
FROM tr
WHERE dt BETWEEN 1621185800000 AND 1625077799000 AND
ty IN (1, 0)
GROUP BY strftime('%Y-%m', date(dt/1000, 'unixepoch'));
或者,如果您不喜歡CASE
表達式:
SUM( (1 - ty) * am ) AS total
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.