2013-02-28 42 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;