{"kay1": val1, "myMap": {"UniqueKey1": "UniqueValue1", "UniqueKey2": "UniqueValue2", "UniqueKey3": "UniqueValue3", "UniqueKey4": "UniqueValue4"}, "key2": {"key3": {"key4": "val4"}, "val3": {"key5": "val5"}}
我在这里发现了类似的问题:Postgres json键计数。
但是,它需要密钥的名称,这可以不使用密钥名称吗?
解决方案
SELECT id, count(elements)
FROM (SELECT id, jsonb_object_keys(column -> 'myMap') AS elements
FROM myTable GROUP BY id
) x
GROUP BY id
SELECT id, (SELECT count(*)
FROM (SELECT jsonb_object_keys(a->'myMap')
FROM test_json x where x.id = y.id
) z
) count
FROM test_json y group by id;
SELECT id, ARRAY_LENGTH(ARRAY(SELECT jsonb_object_keys(column -> 'myMap')), 1) AS count
FROM myTable
CREATE OR REPLACE FUNCTION jsonb_object_keys_length(_j jsonb)
RETURNS INT LANGUAGE SQL IMMUTABLE AS
'SELECT ARRAY_LENGTH(ARRAY(SELECT jsonb_object_keys(column -> 'myMap')), 1)';
CREATE INDEX idx_myMapCount ON myTable (jsonb_object_keys_length(column -> 'myMap'));
在查询中使用函数:
SELECT id, jsonb_object_keys_length(column -> 'myMap') AS count
FROM myTable
如果有更好的方法来建模这个查询,请给出建议。谢了!
有一个名为json_object_keys
的函数,它可能是这个问题的关键部分。它接受一个json对象,并将键作为关系的行返回。
=# create table test_json (a json);
CREATE TABLE
=# insert into test_json values ('{"kay1": 1, "myMap": {"UniqueKey1": "UniqueValue1", "UniqueKey2": "UniqueValue2", "UniqueKey3": "UniqueValue3", "UniqueKey4": "UniqueValue4"}, "key2": {"key3": {"key4": "val4"}, "val3": {"key5": "val5"}}}');
INSERT 0 1
=# select json_object_keys(a) from test_json;
json_object_keys
------------------
kay1
myMap
key2
(3 rows)
=# select json_object_keys(a->'myMap') from test_json;
json_object_keys
------------------
UniqueKey1
UniqueKey2
UniqueKey3
UniqueKey4
(4 rows)
从那里,您可以将其封装在子查询中,如下所示:
=# select count(*) from (select json_object_keys(a->'myMap') from test_json) x;
count
-------
4
(1 row)
编辑添加:有一个jsonb等效项(jsonb_object_keys
),它与jsonb值相同。对不起,我倾向于用普通的JSON来做我的测试用例。
在给定JWS(JWT)头的JWKS密钥存储中,是否有选择签名验证密钥的标准方法? 我的目标是实现OpenID连接ID令牌验证库,我尝试灵活地预测不同的配置,但如果密钥选择是特定于IdP的,我不确定这样做是否有意义。 我当前的算法遍历JWKS并过滤掉: 如果JWK有“使用”字段,如果“使用”不等于“sig”,则拒绝 如果JWK有“密钥操作”字段,如果“密钥操作”不包含“验证”,则拒绝该字段。 如果J
问题内容: 我只想选择特定的列(例如)。我有一个通用的DAO,我想到的是: 错误是: 。我应该如何改变呢?我想获取一个类型对象,该对象仅具有和字段,而其他所有对象都是。 类型扩展有两个字段。 是。 问题答案: 仅获取特定列的JPA方法之一是请求一个Tuple对象。 在您的情况下,您需要编写如下内容: 如果您有一个代表结果的类(例如您的情况),则可以采用另一种方法。不必是Entity类。如果具有类似
问题内容: 我有两个这样的表,两个都是单独的表 另一个表包含以下结构 我需要从表II中选择AccountNo或TempAccountNo,Mycolumn,条件是 我需要选择 我需要选择 我该如何实现。 问题答案:
我对SQL并不陌生,但我对Hibernate完全陌生。我预计,给定一个列值,从表中选择一组对象将是一项非常简单的任务。但我做不到。 我的导师和下面的这个问题都建议了同样的事情,这让我写了下面的代码: JPA:如何基于除ID之外的字段值获取实体? 这是可行的,但方法是已被弃用。由于我对hibernate还不熟悉,我不妨按照它的预期工作方式来学习它,所以我不想使用不推荐的方法。 官方的Hibernat
问题内容: 我正在尝试创建一个Android应用程序,该应用程序将在给定范围内(但在它们之间 不 相等)生成一系列随机值(在这种情况下为整数),并在简单的TextView中显示它们 假设我们有范围 R = [1、2、3、4、5、6、7、8、9、10、11、12、13] 每次我按下 “生成” 按钮时,我想随机生成5个不同的结果 每个“生成”的示例: 4,9,2,12,10 5、1、6、8、13 10
问题内容: 我的问题的示例架构在SQLFiddle中给出,如下所示: 在在线游戏中,我想选择对手,该对手可以在玩家或中。 所需的示例输入/输出 也就是说,所需的数据可以在任何列中,但是我需要有条件地或以任何其他方式在单列中输出。我听说过MySQL条件列,但无法创建查询以获取所需的输出。有人可以帮助您进行必要的查询吗? 编辑 基于此链接,我运行以下查询,但失败。 问题答案: 我认为您可以使用以下语法