【发布时间】:2018-12-04 07:45:29
【问题描述】:
我使用的是 PostgreSQL 10.4 并且有 2 个表:
人:
CREATE TABLE person (
nationality character varying(100),
name character varying(100),
age integer
);
国家:
CREATE TABLE country (
demonym character varying(50),
name character varying(50)
);
这是我要运行的查询:
select "c"."name",
(SELECT row_to_json(r) FROM (
SELECT
COALESCE(sum(CASE WHEN p."nationality"='finn' THEN 1 ELSE 0 END),0) as "1",
COALESCE(sum(CASE WHEN p."nationality"='spanish' THEN 1 ELSE 0 END),0) as "2"
FROM "person" as p
WHERE "p"."nationality"="c"."demonym"
) as r) as "nationalitiesCount"
from "country" as c
WHERE 'nationalitiesCount'::json->'1' > 10
这会产生一个错误:
错误:json 类型的输入语法无效
第 11 行:在哪里 'nationalitiesCount'::json->'1' > 10
详细信息:令牌“nationalitiesCount”无效。
CONTEXT:JSON 数据,第 1 行:nationalitiesCount
第二行将第一个' 突出显示为导致错误出现的代码。
问题:如何纠正错误?
【问题讨论】:
-
@ErwinBrandstetter 编辑问题。通过 9.43 中的第二个链接,该表显示为了访问 json 对象的 prop 值,我们需要具有以下语法:
'{"a":1,"b":2}'::json->>'b'这是我试图复制的内容,您可以在我的代码中看到 sn-p以上。 -
@ErwinBrandstetter 已更正。
-
这是一个失败的案例。修复语法错误(标识符需要双引号)让我们无处可去。您的子查询与
nationality相关,但您尝试同时计算不同的国籍。没有意义。您的编辑改进了问题,但您仍然不知道查询应该实现什么。所以我们甚至不能开始尝试解决这个问题。
标签: postgresql