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