sql >> データベース >  >> RDS >> PostgreSQL

PostgresでオブジェクトのJSON配列をクエリする

    あなたはunestする必要があります 最初に関数(json_array_elementsを使用するjsonオブジェクトの配列 またはjsonb_array_elements jsonbデータ型がある場合 )、キーを指定することで値にアクセスできます。

    WITH json_test (col) AS (
      values (json '[{"name":"Mickey Mouse","age":10},{"name":"Donald Duck","age":5}]')
    )
    SELECT
      y.x->'name' "name"
    FROM json_test jt, 
    LATERAL (SELECT json_array_elements(jt.col) x) y
    
    -- outputs:
    name
    --------------
    "Mickey Mouse"
    "Donald Duck"
    

    一意の名前のカウントを取得するには、上記と同様のクエリですが、個別の集計関数のカウントがy.x->>nameに適用される点が異なります。

    WITH json_test (col) AS (
      values (json '[{"name":"Mickey Mouse","age":10},{"name":"Donald Duck","age":5}]')
    )
    SELECT
      COUNT( DISTINCT y.x->>'name') distinct_names
    FROM json_test jt, 
    LATERAL (SELECT json_array_elements(jt.col) x) y
    

    ->>を使用する必要があります ->の代わりに 前者として(->> )抽出された値をテキストとしてキャストします。これは、同等性の比較(個別のカウントに必要)をサポートしますが、後者(-> )値をjsonとして抽出します。これは、同等性の比較をサポートしていません。

    または、jsonを変換します jsonbとして jsonb_array_elementsを使用します 。 JSONB 等式比較をサポートしているため、->を介した抽出とともにCOUNTDISTINCTを使用できます。 、つまり

    COUNT(DISTINCT (y.x::jsonb)->'name')
    


    1. 文字列をmysql日付に解析する

    2. Win7で改行を含むjsonファイルからのデータをMySQL5.7テーブルに入力する方法はありますか?

    3. テーブルの作成時にTRIGGERを作成してTRIGGERを作成する

    4. 未定義のメソッド`eq'fornil:NilClass with rails 3 and ruby​​ Enterprise on ubuntu hardy