sql >> Database >  >> RDS >> PostgreSQL

SQLAlchemy, PostgreSQL en array_agg:hoe items uit array_agg te selecteren?

U doet waarschijnlijk alles goed, maar krijgt eerst lege arrays. In uw vorige zoekopdracht gebruikte u in-python-filtering (len(x[1]) > 1 ). U kunt Query afdrukken expressie voordat u deze uitvoert om er zeker van te zijn.

U moet waarschijnlijk een having . toevoegen clausule voor je basisquery:

from sqlalchemy import Integer
from sqlalchemy.dialects.postgresql import ARRAY

cats_agg = func.array_agg(ProductCategory.id, type_=ARRAY(Integer)).label('cats')
prods = (
    session.query(
        Product.id.label('id'),
        cats_agg,
    .outerjoin(
        ProductCategory,
        ProductCategory.product_id == Product.id)
    .group_by(Product.id)
    .having(func.array_length(cats_agg, 1) > 1)
    .subquery()
)

Dan heb je ook geen in-python-filtering nodig.




  1. Meerdere waarden uitsluiten van de array

  2. SQL Server versus MySQL:BEVAT(*,'FORMSOF(THESAURUS,word)')

  3. De Adaptive Join Threshold

  4. Kolomalias gebruiken in Select Statement-berekening Oracle SQL