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
不支持 AS
(as 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;
但我想您会同意前者更易于阅读、理解和更改。
我正在尝试在 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
不支持 AS
(as 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;
但我想您会同意前者更易于阅读、理解和更改。