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

いくつかの結果SQLフィールドを共通のオブジェクトにグループ化する

    以下のクエリでうまくいくはずです:

    from sqlalchemy import func
    # ...
    
    query = (
        select(
            [
                func.json_build_object(
                    "id",
                    events.c.id,
                    "title",
                    events.c.title,
                    "location",
                    func.json_agg(
                        func.json_build_object(
                            "city",
                            locations.c.city,
                            "street",
                            locations.c.street,
                            "building",
                            locations.c.building,
                        )
                    ),
                    "location_all_columns_example",
                    func.json_agg(func.json_build_object(
                        *itertools.chain(*[(_.name, _) for _ in locations.c])
                    )),
                    "activity",
                    func.json_agg(
                        func.json_build_object(
                            "name",
                            activities.c.name,
                        )
                    ),
                )
            ]
        )
        .select_from(events.join(locations).join(activities))
        .where(
            and_(
                events.c.id == pk,
                locations.c.id == events.c.location_id,
                activities.c.id == events.c.activities_id,
            )
        )
        .order_by(desc(events.c.created_at))
        .group_by(events.c.id)  # !!! <- IMPORTANT
    )
    

    group_byが必要であることに注意してください 条項。




    1. AndroidでJTDSドライバーを使用してSQLサーバーに接続する方法

    2. 単一または複数のデータベース

    3. PostgreSQL:外部キーとして特定の列を持つすべてのテーブルのリストを取得するSQLスクリプト

    4. Oracle Sql クエリ内から SQL 変数の値を .NET コードに戻す