Как выбрать несколько таблиц? с 6 столами

0

У меня 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
  • 0
    Пример данных таблицы и SQL-кода, который вы кодировали до сих пор, могут помочь.
  • 1
    Это довольно прямое соединение ... Количество таблиц не делает его более сложным, чем простое соединение с двумя таблицами.
Показать ещё 6 комментариев
Теги:

2 ответа

1

У вас есть ошибка в вашем синтаксисе 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
1

Вы ищете такой запрос, как показано ниже:

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню