From b56fb63a376ba77d2da3101497dff87525f8f1f4 Mon Sep 17 00:00:00 2001 From: vladp Date: Wed, 15 Apr 2026 17:41:33 +0700 Subject: [PATCH] dev add statistic rest --- .../repository/TariffInfoRepository.java | 31 ++++++++++--------- 1 file changed, 16 insertions(+), 15 deletions(-) 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); }