0

我很困惑 at-sign 变量是否可以在 MonetDB 中工作。它是标准 SQL 还是只有 mySQL?(例如,在 SO 上查看这个答案。) MonetDB 声称支持 SQL:2003(这里的完整功能列表,我很难解析),但这他们对变量所说的。

以下行在 MonetDB 中失败,抱怨意外符号:。但是有没有办法完成这项工作?我认为没有办法将SET(after DECLARE) 与SELECT.

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

(之后,以下是预期的用例:)

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

1 回答 1

-1

正如评论中已经指出的那样,@变量不是标准 SQL。

使用DECLAREandSET会工作::

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包含 column的表share26_2007。我遵循了这个假设。
  • 我将变量声明firstqdouble. 您的示例未指定 column 的类型share26_2007。相应地更改变量类型。
  • 将变量的值设置为返回原子值的 SELECT 的结果时,您需要在 SELECT 周围加上括号。
  • 目前quantile似乎在 MonetDB 中无法正常工作(请参阅https://www.monetdb.org/bugzilla/show_bug.cgi?id=4076),但这与您的问题无关。quantile上面的语法有效(您可能想通过替换来验证sys.quantile
于 2016-09-30T10:21:12.717 回答