У меня есть таблица SQL с двумя такими столбцами и примерно 130 тыс. строк. (9 тысяч уникальных пользователей, 7500 уникальных навыков)
Я пытаюсь понять (и, возможно, визуализировать) количество пользователей, обладающих одинаковыми наборами навыков. Я не знаю, какие навыки пересекаются сегодня.
Мне нужны результаты группы A {Skills: 1, 2 и 7}, состоящей из 10 человек, Группа B {Skills: 10 и 95} состоит из 19 человек и т. д.
Спасибо за вашу помощь.
Вы имеете в виду один и тот же набор навыков или пересекающиеся наборы навыков? Если бы у одного пользователя были навыки 1,2,3, а у другого — навыки 2,3,4, то они вообще не совпадали бы или вы бы хотели, чтобы они отображались как соответствующие навыкам 2,3?
какую СУБД вы используете? MySQL, SQL Server, PostgreSQL,..... . отмечайте это правильно
Ваши выборочные данные слишком скудны для этого вопроса. Пожалуйста, предоставьте больше данных в примере и желаемый результат. Используя ваши данные, установите навыки (1,2)-count=1 (пользователь A). Набор навыков (1) count=1 (пользователь C) или count=2 (userc A,C)? А навыки установлены (2)-count=0 или count=1 (пользователь А)?
Во-первых, вам необходимо сгруппировать пользователей по их набору навыков.
предполагая, что вы используете MySQL, это примерно так:
SELECT
User,
group_concat(Skill ORDER BY Skill, ',') AS Skills
FROM
your_table
GROUP BY
User;
Далее вы можете сгруппировать по навыкам, используя первый выбор как общее табличное выражение, и подсчитать пользователей в каждой группе:
WITH UserSkills AS (
SELECT
User,
group_concat(Skill ORDER BY Skill, ',') AS Skills
FROM
your_table
GROUP BY
User
)
SELECT
Skills,
COUNT(User) AS NumberOfUsers
FROM
UserSkills
GROUP BY
Skills
ORDER BY
NumberOfUsers DESC;
Если вы не используете MySQL, вам необходимо найти соответствующую функцию для group_concat (например, string_agg в PostgreSQL).
Ожидается, что минимально воспроизводимый пример будет включать как данные таблицы образцов, так и ожидаемый результат (соответствующий данным образца). Также покажите нам свою текущую попытку запроса и добавьте тег для используемой базы данных.