У меня 6 таблиц
страны таблицы country_id | short_name
country_id | short_name
пользователь таблицы (если статус = 2 активен, если статус = 1 неактивен) id | country_id | status
id | country_id | status
таблица user_subscribed_disciplines id | user_id |discipline_id
id | user_id |discipline_id
стол ученик id | name
id | name
table user_subscribed_study_levels id | user_id | study_level_id
id | user_id | study_level_id
table study_levels id | name
id | name
Как выбрать все страны с его параметрами? Как написать правильный SQL-запрос?
country | total users count | active users count | inactive users count | discipline subscribers count | top discipline | study level subscribers count | top study level
USA | 506 | 500 | 6 | 50 | PHD | 90 | Social History
CAN | 406 | 406 | 0 | 50 | POS | 0 | Social History
У вас есть ошибка в вашем синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса для использования рядом с '1 name, count() из группы дисциплин по порядку имен по count() desc' в строке 6
select c.country_id
, count(u.id) as TotalUsers
, sum(case when u.status = 'active' then 1 else 0 end) as ActiveUsers
, sum(case when u.status = 'Inactive' then 1 else 0 end) as InactiveUsers
, (select count(*) from user_subscribed_disciplines) as DisciplineSubscribers
, (select name from (select top 1 name,count(*) from disciplines group by name order by count(*) desc) t) as TopDiscipline
, (select count(*) from user_subscribed_study_levels) as StudyLevelCount
, (select name from (select top 1 name,count(*) from study_levels group by name order by count(*) desc) t) as TopStudyLevel
from countries c
inner join user u on u.country_id=c.country_id
Вы ищете такой запрос, как показано ниже:
select c.country_id
, count(u.id) as TotalUsers
, sum(case when u.status = 'active' then 1 else 0 end) as ActiveUsers
, sum(case when u.status = 'Inactive' then 1 else 0 end) as InactiveUsers
, (select count(*) from user_subscribed_disciplines) as DisciplineSubscribers
, (select name from (select top 1 name,count(*) from disciplines group by name order by count(*) desc) t) as TopDiscipline
, (select count*) from user_subscribed_study_levels) as StudyLevelCount
, (select name from (select top 1 name,count(*) from study_levels group by name order by count(*) desc) t) as TopStudyLevel
from countries c
inner join user u on u.country_id=c.country_id