сравните числовые значения mysql group_concat двух столбцов с объединением

#mysql #sql

Вопрос:

У меня есть 3 стола

 1.users

user_id     nationality    
 
  1         Egyptian     
  2         Palestinian    
  3         French  
 
  1. центры
 id      center_name
 
  1         q
  12        y
  5         x
  23        z
 
  1. пользователи 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. Спасибо, сэр, Краткость-это душа остроумия!! Это работает!