簡體   English   中英

分組和連接同一個表中的行 - SQLite

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM