为什么“group by”只提供一列作为输出?

时间:2013-02-28 13:32:52

标签: monetdb

我有一张像这样的表:

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中是否可以选择分组?

1 个答案:

答案 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;