Я пытаюсь найти запрос MySQL, который найдет различные значения в определенном поле, посчитайте количество вхождений этого значения в 2 поля (1_user, 2_user), а затем закажите результаты по счету.
пример db
+ ------ + ----------- + ----------- + | id | 1_user | 2_user | + ------ + ----------- + ----------- + | 1 | 2 | 1 | | 2 | 3 | 2 | | 3 | 8 | 7 | | 4 | 1 | 8 | | 5 | 2 | 8 | | 6 | 3 | 8 | + ------ + ----------- + ----------- +
ожидаемый результат
количество пользователей ----- ----- 8 4 2 3 3 2 1 2
Запрос
SELECT user, count(*) AS count FROM ( SELECT 1_user AS USER FROM test UNION ALL SELECT 2_user FROM test ) AS all_users GROUP BY user ORDER BY count DESC
объяснение
Список всех пользователей в первом столбце.
SELECT 1_user AS USER FROM test
Объедините их с пользователями из второго столбца.
UNION ALL SELECT 2_user FROM test
Трюк здесь – это UNION ALL, который сохраняет повторяющиеся значения.
Остальное легко – выберите нужные результаты из подзапроса:
SELECT user, count(*) AS count
агрегировать по пользователю:
GROUP BY user
и предписывают заказ:
ORDER BY count DESC
SELECT u, count(u) AS cnt FROM ( SELECT 1_user AS u FROM table UNION ALL SELECT 2_user AS u FROM table ) subquery GROUP BY u ORDER by cnt DESC
Возьмите 2 запроса:
SELECT COUNT(*) FROM table GROUP BY 1_user SELECT COUNT(*) FROM table GROUP BY 2_user
Теперь объедините их:
SELECT user, SUM(count) FROM ((SELECT 1_user as user FROM table) UNION ALL (SELECT 2_user as user FROM table)) GROUP BY user, ORDER BY count DESC;
Я думаю, это то, что вы ищете, так как ваш ожидаемый результат не включал 7
select usr, count(usr) cnt from ( select user_1 usr from users union all select user_2 usr from users ) u where u.usr in (select user_1 from users) group by usr order by count(u.usr) desc