#mysql #sql
Вопрос:
У меня есть 3 стола
1.users
user_id nationality
1 Egyptian
2 Palestinian
3 French
- центры
id center_name
1 q
12 y
5 x
23 z
- пользователи centers_
student_id center_id
1 12
2 5
3 5
1 23
2 12
чего я ожидаю
Nationality center_name count_of_users_from this country
Egyptian y,z 10
Palestinian x,y 33
French x,q 7
Я перепробовал много запросов mysql, но не могу получить желаемый результат
Последний запрос, который я выполняю:
SELECT * from (SELECT (LENGTH(GROUP_CONCAT(DISTINCT user_id))-ENGTH(REPLACE(GROUP_CONCAT(DISTINCT user_id), ',', ''))) as ss,GROUP_CONCAT( DISTINCT user_id) ,nationality from user where user_id in(SELECT student_id FROM `centers_users`) GROUP by nationality)a
Но считайте только с национальностью.
Когда я присоединяюсь к центрам, это дает мне избыточность, потому что я не могу поставить условие «ВКЛЮЧЕНО» с помощью group_concat
Как я могу это реализовать?
Спасибо..
Ответ №1:
Я думаю, вы хотите присоединиться к таблицам и объединить:
select u.nationality,
group_concat(distinct c.center_name) as center_names,
count(distinct user_id) as users_from_this_country
from users u join
user_centers uc
on u.user_id = uc.student_id join
centers c
on c.center_id = uc.center_id
group by u.nationality;
Возможно, вы сможете использовать count(*)
для users_from_this_country
. Это зависит от того, как вы хотите подсчитать пользователя, находящегося в нескольких центрах в одной стране.
Комментарии:
1. Спасибо, сэр, Краткость-это душа остроумия!! Это работает!