2016-10-13 38 views
0
はpostgresで

は、私のようなスキーマを持っていると言うオブジェクトメインデータが次のクエリである:はJSONオブジェクトを作成し、JSONの配列を使用して

SELECT ARRAY_AGG(x) 
    FROM 
    (
     SELECT type, 
     count(*), 
     (CASE 
      WHEN (SELECT id 
       FROM items as i 
       WHERE i.entity_type = 'sometype' 
        AND i.entity_id = 234 
        AND i.user_id = 32 
        AND i.type = items.type) is not null 
      THEN true 
      ELSE false 
     END) AS me 
     FROM items 
     WHERE items.entity_type = 'sometype' 
     AND items.entity_id = 234 
     GROUP BY type 
    ) as x 

これは、必要な情報の配列を返します。しかし、私は上記のようにフォーマットされている必要があります:

[ 
    { 
     "type": "typeA", 
     "count": 3, 
     "me": true 
    }, 
    { 
     "type": "typeC", 
     "count": 3, 
     "me": false 
    }, 
    { 
     "type": "typeE", 
     "count": 3, 
     "me": false 
    }, 
    { 
     "type": "typeR", 
     "count": 3, 
     "me": true 
    } 
] 

これは、現在のフォーマット方法です。私が必要とするjsonオブジェクトを構築する方法を見つけることができませんでした。私はそれのような3つのjsonオブジェクトを得ることができました。しかし、3つのオブジェクトを1つのオブジェクトに入れ子にする必要があります。

答えて

0

正確にはあなたが望むものではありませんが、PostgreSQL - Aggregate Functionsからは、json_object_agg(name, value)を試してみてください。

SELECT JSON_OBJECT_AGG(type, x) 
    FROM 
    (
     SELECT type, 
     count(*), 
     (CASE 
      WHEN (SELECT id 
       FROM items as i 
       WHERE i.entity_type = 'sometype' 
        AND i.entity_id = 234 
        AND i.user_id = 32 
        AND i.type = items.type) is not null 
      THEN true 
      ELSE false 
     END) AS me 
     FROM items 
     WHERE items.entity_type = 'sometype' 
     AND items.entity_id = 234 
     GROUP BY type, me 
    ) as x 
+0

これは完全に動作しますが、これはタイプに追加されますが、それは必要なようです。ありがとう、トンolaf。 :) – wizardofmath

関連する問題