From dde091138e4954629e9bee25738f413f7507db80 Mon Sep 17 00:00:00 2001 From: Felipe Cardoso Date: Thu, 6 Nov 2025 11:11:18 +0100 Subject: [PATCH] Refine organization query to count only active members using CASE statement --- backend/app/crud/organization.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/backend/app/crud/organization.py b/backend/app/crud/organization.py index 8e7304e..3e98cd9 100755 --- a/backend/app/crud/organization.py +++ b/backend/app/crud/organization.py @@ -4,7 +4,7 @@ import logging from typing import Optional, List, Dict, Any from uuid import UUID -from sqlalchemy import func, or_, and_, select +from sqlalchemy import func, or_, and_, select, case from sqlalchemy.exc import IntegrityError from sqlalchemy.ext.asyncio import AsyncSession @@ -149,15 +149,16 @@ class CRUDOrganization(CRUDBase[Organization, OrganizationCreate, OrganizationUp """ try: # Build base query with LEFT JOIN and GROUP BY + # Use CASE statement to count only active members query = ( select( Organization, func.count( func.distinct( - and_( - UserOrganization.is_active == True, - UserOrganization.user_id - ).self_group() + case( + (UserOrganization.is_active == True, UserOrganization.user_id), + else_=None + ) ) ).label('member_count') )