2014-06-12 20 views
0

我很困惑at-sign變量是否可以在MonetDB中工作。是標準的SQL還是隻有mySQL? (例如,請參閱this)。MonetDB聲稱支持SQL:2003(完整功能列表here,難以解析),但是this就是他們對變量所說的話。用於monetdb的SQL變量

以下行在MonetDB中抱怨意外符號:失敗。但是有沒有辦法做到這一點?我沒有辦法將SET(在DECLARE之後)與SELECT合併。

SELECT @firstq := QUANTILE(share26_2007,0.25) FROM sys.share26_2007; 

(此後,下面是打算用例:)

SELECT peorglopnr, CASE WHEN share26_2007 < @firstq THEN 1 
+1

標準SQL中沒有變量。 SQL標準僅爲過程語言(SQL/PSM)定義變量。 –

+0

@a_horse_with_no_name謝謝 - 那麼你知道我是否可以使用具有'SELECT'的'SET'? monetdb的例子是關於設置一個聲明變量的值爲「手動」,而不是查詢的結果... –

+0

我沒有MonetDB的經驗。但是如果手冊中這樣說的話,我會相信這本手冊。 –

回答

0

正如已經在評論中指出,@變量不是標準的SQL。

使用DECLARESET將工作::

DECLARE firstq double; 
SET firstq = (SELECT quantile(share26_2007, 0.25) FROM share26_2007); 

SELECT peorglopnr, CASE WHEN share26_2007 < firstq THEN 1 ..... 

注:

  • 我從你的例子明白的是,你有一個表share26_2007其中有一列share26_2007。我遵循這個假設。
  • 我宣佈變量firstqdouble。你的例子沒有指定列的類型share26_2007。相應地更改變量類型。
  • 當將變量的值設置爲返回原子值的SELECT的結果時,您確實需要圍繞SELECT選擇括號。
  • 此時quantile在MonetDB中似乎不能正常工作(請參閱https://www.monetdb.org/bugzilla/show_bug.cgi?id=4076),但這與您的問題無關。上述語法的工作原理(您可能需要驗證通過將quantile替換爲sys.quantile