检索计数的子查询
Subquery for retrieving count
我正在尝试 select 所有 parents 的 children。
我有以下查询:
SELECT
a.*,
(SELECT COUNT(*) FROM demo b WHERE b.parent = a.name) as count
FROM demo a
WHERE
meta(a).id LIKE "xyz:%"
AND a.parent IS MISSING
ORDER BY a.createdAt DESC LIMIT 50 OFFSET 0
我的文档类似于:
xyz:1
{
id: 1,
name: "parent",
createdAt: 1234
}
xyz:2
{
id: 2,
name: "child",
parent: "parent",
createdAt: 5678
}
我收到以下错误:
Error evaluating projection. - cause: FROM in correlated subquery must have USE KEYS clause: FROM demo.
Error code: 5010
更新:
以下查询似乎有效:
SELECT
a.*,
(SELECT COUNT(id) as count FROM demo b WHERE b.parent = "parent")[0].count as count
FROM demo a
WHERE
meta(a).id LIKE "xyz:%"
AND a.parent IS MISSING
ORDER BY a.createdAt DESC LIMIT 50 OFFSET 0
但是如果我用 a.name
替换 "parent"
它会给出同样的错误。
您需要执行 ANSI JOIN,然后执行 GROUP BY。查询将如下所示:
SELECT l.name, COUNT(1)
FROM demo l JOIN demo r ON r.name = l.child
GROUP BY l.name
对于 运行 这个查询,您需要在 r 端有一个索引:
CREATE INDEX demo_name_idx ON demo(name)
一定要在实际数据上测试查询;我可能缺少一些皱纹。特别是,如果您的名字不唯一,您可能希望按 l.id 而不是 l.name 分组。
我正在尝试 select 所有 parents 的 children。
我有以下查询:
SELECT
a.*,
(SELECT COUNT(*) FROM demo b WHERE b.parent = a.name) as count
FROM demo a
WHERE
meta(a).id LIKE "xyz:%"
AND a.parent IS MISSING
ORDER BY a.createdAt DESC LIMIT 50 OFFSET 0
我的文档类似于:
xyz:1
{
id: 1,
name: "parent",
createdAt: 1234
}
xyz:2
{
id: 2,
name: "child",
parent: "parent",
createdAt: 5678
}
我收到以下错误:
Error evaluating projection. - cause: FROM in correlated subquery must have USE KEYS clause: FROM demo.
Error code: 5010
更新: 以下查询似乎有效:
SELECT
a.*,
(SELECT COUNT(id) as count FROM demo b WHERE b.parent = "parent")[0].count as count
FROM demo a
WHERE
meta(a).id LIKE "xyz:%"
AND a.parent IS MISSING
ORDER BY a.createdAt DESC LIMIT 50 OFFSET 0
但是如果我用 a.name
替换 "parent"
它会给出同样的错误。
您需要执行 ANSI JOIN,然后执行 GROUP BY。查询将如下所示:
SELECT l.name, COUNT(1)
FROM demo l JOIN demo r ON r.name = l.child
GROUP BY l.name
对于 运行 这个查询,您需要在 r 端有一个索引:
CREATE INDEX demo_name_idx ON demo(name)
一定要在实际数据上测试查询;我可能缺少一些皱纹。特别是,如果您的名字不唯一,您可能希望按 l.id 而不是 l.name 分组。