Как в SQLAlchemy отсортировать результат по количеству имеющихся child в relationship

У меня есть модель User:

class User(BaseModel):
    __tablename__ = "users"

    id: Mapped[int] = mapped_column(primary_key=True)
    parent_id: Mapped[int] = mapped_column(ForeignKey("users.id"))
    childs: Mapped[list["User"]] = relationship()

Я хочу вывести пользователей с самым наибольшим количеством childs, но не представляю как.

Я пробовал:

func.count(User.childs)
order_by(desc(User.childs))

... но не сработало. Получилось достичь приблизительно результата только так

        subquery = (
            select(User.parent_id, func.count().label("count"))
            .group_by(User.parent_id)
            .order_by(desc("count"))
            .limit(10)
            .subquery()
        )
        result = await session.execute(
            select(User, subquery.c.count)
            .where(User.id == subquery.c.parent_id)
            .order_by(subquery.c.count.desc())
            .limit(10)
        )

Но мне кажется, есть решение поизящнее


Ответы (1 шт):

Автор решения: Kuro Angel

В целом нашёл такой вариант

child = aliased(User)
stmt = (
            select(User, func.count(child.id).label("count"))
            .outerjoin(child, User.childs)
            .order_by(literal_column("count").desc())
            .group_by(User.id)
            .limit(10)
        )
→ Ссылка