【问题标题】:Find object having the highest value in JSON in Postgresql在 Postgresql 中查找 JSON 中具有最高值的对象
【发布时间】:2017-04-08 16:11:22
【问题描述】:

假设我们在数据库中有几个具有属性data 的对象,其中属性data 包括:{'gender' => {'male' => 40.0, 'female' => 30.0 => 'undefined' => 30.0}}

我只想找到gender => male 值最高的这些对象。

PostgreSQL 9.5

【问题讨论】:

  • select * from your_table where 'male' = (select k from json_each_text(data->'gender') as j(k,v) order by v::numeric desc limit 1);

标签: sql json postgresql greatest-n-per-group


【解决方案1】:

假设我正确理解了您的问题(示例输入/输出会很有用):

WITH jsons(id, j) AS (
  VALUES
    (1, '{"gender": {"male": 40.0, "female": 30.0, "undefined": 30.0}}'::json),
    (2, '{"gender": {"male": 40.0, "female": 30.0, "undefined": 30.0}}'),
    (3, '{"gender": {"male": 0.0, "female": 30.0, "undefined": 30.0}}')
)
SELECT id, j
FROM jsons
WHERE (j->'gender'->>'male') :: float8 = (
  SELECT MAX((j->'gender'->>'male') :: float8)
  FROM jsons
)
;
┌────┬───────────────────────────────────────────────────────────────┐
│ id │                               j                               │
├────┼───────────────────────────────────────────────────────────────┤
│  1 │ {"gender": {"male": 40.0, "female": 30.0, "undefined": 30.0}} │
│  2 │ {"gender": {"male": 40.0, "female": 30.0, "undefined": 30.0}} │
└────┴───────────────────────────────────────────────────────────────┘
(2 rows)

【讨论】:

    猜你喜欢
    • 2021-12-06
    • 2021-09-05
    • 2013-05-06
    • 2019-04-11
    • 1970-01-01
    • 1970-01-01
    • 2019-12-16
    • 1970-01-01
    • 2017-02-20
    相关资源
    最近更新 更多