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

MariaDB JSON_OBJECTAGG()の説明

    MariaDBでは、JSON_OBJECTAGG() は、2つの引数に基づいて、キーと値のペアを含むJSONオブジェクトを返す組み込み関数です。

    構文

    構文は次のようになります:

    JSON_OBJECTAGG(key, value)

    この関数は、引数として、単一の値または2つの列名に評価される2つの式を受け入れます。最初の引数はキーで、2番目の引数はその値です。

    簡単な例を次に示します。

    SELECT JSON_OBJECTAGG("name", "Homer");

    結果:

    +---------------------------------+
    | JSON_OBJECTAGG("name", "Homer") |
    +---------------------------------+
    | {"name":"Homer"}                |
    +---------------------------------+

    この例は関数がどのように機能するかを示していますが、列やその他の式を操作するときに真のメリットがあります。

    以下は、引数にデータベース列を使用する例です。

    データベースの例

    テーブルをクエリするとします:

    SELECT 
        PetName,
        DOB
    FROM Pets;

    そして、次の結果セットを取得します。

    +---------+------------+
    | PetName | DOB        |
    +---------+------------+
    | Fluffy  | 2020-11-20 |
    | Fetch   | 2019-08-16 |
    | Scratch | 2018-10-01 |
    | Wag     | 2020-03-15 |
    | Tweet   | 2020-11-28 |
    | Fluffy  | 2020-09-17 |
    | Bark    | NULL       |
    | Meow    | NULL       |
    +---------+------------+

    次に、各列をJSON_OBJECTAGG()に渡すクエリを実行してみましょう。 関数、結果がJSONオブジェクトとして返されるようにします:

    SELECT JSON_OBJECTAGG(PetName, DOB)
    FROM Pets
    WHERE DOB < '2020-04-01';

    結果:

    +--------------------------------------------------------------------+
    | JSON_OBJECTAGG(PetName, DOB)                                       |
    +--------------------------------------------------------------------+
    | {"Fetch":"2019-08-16", "Scratch":"2018-10-01", "Wag":"2020-03-15"} |
    +--------------------------------------------------------------------+

    列名をJSON_OBJECTAGG()に渡すだけでした 働き。

    WHEREも使用しました 結果を少し絞り込むための句。

    グループ化された結果

    SQL GROUP BYを使用できます 別の列のグループ化に基づいてJSONオブジェクトを生成する句。

    元のクエリに列を追加するとします:

    SELECT 
        PetTypeId,
        PetName,
        DOB
    FROM Pets;

    結果:

    +-----------+---------+------------+
    | PetTypeId | PetName | DOB        |
    +-----------+---------+------------+
    |         2 | Fluffy  | 2020-11-20 |
    |         3 | Fetch   | 2019-08-16 |
    |         2 | Scratch | 2018-10-01 |
    |         3 | Wag     | 2020-03-15 |
    |         1 | Tweet   | 2020-11-28 |
    |         3 | Fluffy  | 2020-09-17 |
    |         3 | Bark    | NULL       |
    |         2 | Meow    | NULL       |
    +-----------+---------+------------+

    これで、PetTypeIdができました。 列とPetName およびDOB 列。これは、ペットの種類を各ペットに一致させます。

    GROUP BYの使用例を次に示します。 結果をPetTypeIdでグループ化する句 JSON_OBJECTAGG()の使用中の列 機能:

    SELECT 
        PetTypeId,
        JSON_OBJECTAGG(PetName, DOB)
    FROM Pets
    GROUP BY PetTypeId;

    結果:

    +-----------+--------------------------------------------------------------------------------+
    | PetTypeId | JSON_OBJECTAGG(PetName, DOB)                                                   |
    +-----------+--------------------------------------------------------------------------------+
    |         1 | {"Tweet":"2020-11-28"}                                                         |
    |         2 | {"Fluffy":"2020-11-20", "Scratch":"2018-10-01", "Meow":null}                   |
    |         3 | {"Fetch":"2019-08-16", "Wag":"2020-03-15", "Fluffy":"2020-09-17", "Bark":null} |
    +-----------+--------------------------------------------------------------------------------+

    これにより、ペットの種類ごとに個別のJSONオブジェクトを作成できました。

    次のクエリはINNER JOINを使用しています 別のテーブルで、IDだけでなく実際のペットの種類を返します。

    SELECT 
        pt.PetType,
        p.PetName,
        p.DOB
    FROM Pets p 
    INNER JOIN PetTypes pt 
    ON pt.PetTypeId = p.PetTypeId
    ORDER BY PetType;

    結果:

    +---------+---------+------------+
    | PetType | PetName | DOB        |
    +---------+---------+------------+
    | Bird    | Tweet   | 2020-11-28 |
    | Cat     | Scratch | 2018-10-01 |
    | Cat     | Fluffy  | 2020-11-20 |
    | Cat     | Meow    | NULL       |
    | Dog     | Wag     | 2020-03-15 |
    | Dog     | Fetch   | 2019-08-16 |
    | Dog     | Bark    | NULL       |
    | Dog     | Fluffy  | 2020-09-17 |
    +---------+---------+------------+

    ペットタイプIDだけでなく、実際のペットタイプが最初の列に表示されていることがわかります。

    それでは、JSON_OBJECTAGG()を使用しましょう。 機能:

    SELECT 
        pt.PetType,
        JSON_OBJECTAGG(p.PetName, p.DOB)
    FROM Pets p 
    INNER JOIN PetTypes pt 
    ON pt.PetTypeId = p.PetTypeId
    GROUP BY pt.PetType;

    結果:

    +---------+--------------------------------------------------------------------------------+
    | PetType | JSON_OBJECTAGG(p.PetName, p.DOB)                                               |
    +---------+--------------------------------------------------------------------------------+
    | Bird    | {"Tweet":"2020-11-28"}                                                         |
    | Cat     | {"Scratch":"2018-10-01", "Fluffy":"2020-11-20", "Meow":null}                   |
    | Dog     | {"Wag":"2020-03-15", "Fetch":"2019-08-16", "Bark":null, "Fluffy":"2020-09-17"} |
    +---------+--------------------------------------------------------------------------------+

    1. 2つの行の間の時間差を計算します

    2. GoogleBigQueryをIRIVoracityソフトウェアに接続する

    3. テーブル内で最大のIDを持つ行全体を選択するにはどうすればよいですか?

    4. SQL Server 2014のプロセッサの選択–パート1