我有一张像这样的表:
ID|Value
01|1
02|4
03|12
01|5
02|14
03|22
01|9
02|32
02|62
01|13
03|92
我想知道每个id有多少进展(从初始值或最小值开始)
所以在sybase中我可以输入:
select ID, (value-min(value)) from table group by id;
ID|Value
01|0
01|4
01|8
01|12
02|0
02|10
02|28
02|58
03|0
03|10
03|80
但是monetdb
不支持这个(我不确定它可能是因为它使用SQL'99)。
分组只给出一列,或者可能是其他值的平均值,但不是所需的结果。
在monetdb
中是否可以选择分组?
答案 0 :(得分:4)
您可以通过自我加入来实现这一目标。我们的想法是,您构建一个子选择,为每个id提供最小值,然后通过id将其连接到原始表。
SELECT a.id, a.value-b.min_value
FROM "table" a INNER JOIN
(SELECT id, MIN(value) AS min_value FROM "table" GROUP BY id) AS b
ON a.id = b.id;