diff --git a/src/main/java/ru/soune/nocopy/repository/TariffInfoRepository.java b/src/main/java/ru/soune/nocopy/repository/TariffInfoRepository.java index ccc0061..f9a256d 100644 --- a/src/main/java/ru/soune/nocopy/repository/TariffInfoRepository.java +++ b/src/main/java/ru/soune/nocopy/repository/TariffInfoRepository.java @@ -33,20 +33,21 @@ public interface TariffInfoRepository extends JpaRepository Long getTotalUsersCount(@Param("activeOnly") boolean activeOnly); @Query(value = """ - SELECT - COALESCE(t.tariff_name, 'NULL') as tariff_name, - COUNT(u.id) as user_count, - (COUNT(u.id) * 100.0) / NULLIF( - (SELECT COUNT(*) FROM users u2 - WHERE :activeOnly = false OR u2.is_active = true - ), 0 - ) as usage_percent - FROM users u - LEFT JOIN tariff_info pti ON u.personal_tariff_info_id = pti.id - LEFT JOIN tariff t ON pti.tariff_id = t.id - WHERE :activeOnly = false OR u.is_active = true - GROUP BY t.id, t.tariff_name - ORDER BY user_count DESC - """, nativeQuery = true) + SELECT + t.tariff_name, + COUNT(u.id) as user_count, + (COUNT(u.id) * 100.0) / NULLIF( + (SELECT COUNT(*) FROM users u2 + WHERE (:activeOnly = false OR u2.is_active = true) + AND u2.personal_tariff_info_id IS NOT NULL + ), 0 + ) as usage_percent + FROM users u + INNER JOIN tariff_info pti ON u.personal_tariff_info_id = pti.id + INNER JOIN tariff t ON pti.tariff_id = t.id + WHERE (:activeOnly = false OR u.is_active = true) + GROUP BY t.id, t.tariff_name + ORDER BY user_count DESC +""", nativeQuery = true) List getTariffStatisticsNative(@Param("activeOnly") boolean activeOnly); }