PostgreSQL
 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Мигрирайте дъмпа на postgres към RDS

  2. Логическа репликация на дялове с PostgreSQL 13

  3. Изберете отключен ред в Postgresql

  4. Използване на LENGTH (изчислена колона) в ORDER BY в Postgres sql

  5. как да коригирате OperationalError:(psycopg2.OperationalError) сървърът затвори връзката неочаквано