2013-02-28 77 views
1

我有一个表是这样的:为什么“group by”只给出一列作为输出?

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)。
Group by只给出一列或可能是其他值的平均值,但不是期望的结果。

monetdb有没有其他的选择?

+0

我当然希望monetdb不会支持这个。如果按ID进行分组,则按照group by的定义,可以将ID分组。也就是说,您无法获取具有相同ID的多个行。 – cornuz 2014-10-13 06:41:04

回答

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;