@alexfyodrv

Как сгрупировать данные из двух таблиц по одной колонке?

Подскажите пожалуйста как я могу сгрупировать данные из двух таблиц по значению value?
В таблицах "data1, data2" хранятся статусы разных типов и мне нужно сделать общую таблицу где показать какое количество пользователей имеют этот статус.

$query = User::leftJoin('data1', 'data1.user_id', '=', 'users.id')
            ->leftJoin('data2', 'data2.user_id', '=', 'users.id')
            ->select('data1.text as value', 'data2.name as value', DB::raw('count(*) as users_count'))
            ->groupBy('value')
            ->orderByDesc('users_count');
  • Вопрос задан
  • 70 просмотров
Решения вопроса 1
idShura
@idShura
select d.value,
       count(*) users_count 
  from user u

left join (select user_id, data1.text value from data1
            union all
           select user_id, data2.name value from data2
           ) d on d.user_id = u.id

group by d.value
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
опоздал... ))

м... вопрос - зачем лефт джойн? имхо не нужен.

не знаю как это в ваших ларавелях, в SQL примерно так думаю:
SELECT t.value, count(*) as users_count
  FROM users u
  JOIN (
    SELECT d1.text as value, d1.user_id FROM data1 d1
    UNION
    SELECT d2.name as value, d2.user_id FROM data2 d2
  ) t on t.user_id = u.id
  GROUP BY t.value
  ORDER BY users_count DESC


PS: если нужно считать И совпадающие в data1 и data2 записи, то UNION заменить на UNION ALL

UPD: просто выполните сырой select
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
KubRu Сочи
До 120 000 руб.
от 80 000 до 160 000 руб.
Риверстарт Нижний Новгород
от 60 000 до 150 000 руб.
09 дек. 2019, в 12:49
30000 руб./за проект
09 дек. 2019, в 12:29
150000 руб./за проект