Couchbase N1QL:GROUP BY CASE 子句不起作用

Couchbase N1QL: GROUP BY CASE clause not working

我正在尝试在 Couchbase 上执行 GROUP BY CASE 查询 workbench。

查询是-

SELECT Hemisphere, COUNT(DISTINCT name) AS LandmarkCount
FROM `travel-sample` AS l
WHERE type="landmark"
GROUP BY CASE
  WHEN l.geo.lon <0 THEN "West"
  ELSE "East"
END AS Hemisphere;

此查询由 Couchbase 文档提供,作为对 this link

执行 GROUP BY CASE 查询的示例

我收到以下错误:

[
  {
    "code": 3000,
    "msg": "syntax error - at AS",
    "query_from_user": "SELECT Hemisphere, COUNT(DISTINCT name) AS LandmarkCount\r\nFROM `travel-sample` AS l\r\nWHERE type=\"landmark\"\r\nGROUP BY CASE\r\n  WHEN l.geo.lon <0 THEN \"West\"\r\n  ELSE \"East\"\r\nEND AS Hemisphere;"
  }
]

我正在开发 Community Edition 6.0.0 build 1693。

我想我有你想要的解决方案:

SELECT Hemisphere,
  COUNT(DISTINCT name) AS LandmarkCount
FROM `travel-sample` AS l
LET Hemisphere = CASE
    WHEN l.geo.lon <0 THEN "West"
    ELSE "East"
  END
WHERE type="landmark"
GROUP BY Hemisphere;

您收到的错误是因为在 6.0 中,GROUP BY 不支持 ASas shown in the 6.0 docs,如错误消息所述)。

另一种方法是 use LET in 6.0+ to define a variable,就像我在上面的例子中所做的那样。

但请注意 LET 也不是 必需的 ;您也可以在没有它的情况下编写查询,如下所示:

SELECT CASE
    WHEN l.geo.lon <0 THEN "West"
    ELSE "East"
  END AS Hemisphere,
  COUNT(DISTINCT name) AS LandmarkCount
FROM `travel-sample` AS l
WHERE type="landmark"
GROUP BY CASE
  WHEN l.geo.lon <0 THEN "West"
  ELSE "East"
END;

但我想您会同意前者更易于阅读、理解和更改。