Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 21.05.2020
Сообщений: 5

Как сгруппировать пользователей по одному или двум параметрам

12.03.2022, 23:59. Показов 1183. Ответов 6

Студворк — интернет-сервис помощи студентам
Здравствуйте,
Мне нужно сгруппировать пользователей, чтобы они были в одной группе, если у них одинаковое имя или адрес электронной почты. То есть для объединения их в одну группу не обязательно, чтобы у всех был один и тот же e-mail или имя, достаточно, чтобы имя или e-mail совпадали хотя бы с одним другим пользователем. Желаемый результат на картинке в последней колонке.

То есть если у пользователя 1 и 2 одинаковый мейл, у пользователя 2 и 3 одинаковое имя - все три пользователя должны быть в одной группе.

Я пытался использовать Dense_Rank для имени и электронной почты, но не знаю, смогу ли я их объединить.

Также буду признателен, если подскажете, где можно найти информацию по этой теме, так как на данный момент я даже не знаю, как правильно сформулировать запрос в гугле

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
CREATE TABLE #a (UserID INT, Name VARCHAR(25), Email VARCHAR(50))
 
INSERT INTO #a
VALUES
(1, 'Marvin Cottrell', '123456@gmail.com'),
(2, 'Colleen Morrison', 'somebody@gmail.com'),
(3, 'Colleen Morrison', 'cm@gmail.com'),
(4, 'Dante Henry', '765@gmail.com'),
(5, 'Willie Alcock', '123456@gmail.com'),
(6, 'Marvin Cottrell', 'lib@gmail.com'),
(7, 'Cecilia Mueller', '765@gmail.com'),
(8, 'Cathal Compton', '765@gmail.com'),
(9, 'Giovanni Tapia', '123456@gmail.com'),
(10, 'Humphrey Macias', 'somebody@gmail.com')
 
SELECT *, DENSE_RANK () OVER (ORDER BY Name DESC) AS DENSE
FROM #a
 
SELECT *, DENSE_RANK () OVER (ORDER BY Email DESC) AS DENSE
FROM #a
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.03.2022, 23:59
Ответы с готовыми решениями:

Как вывести результаты поиска по фильтру по одному или двум параметрам
Есть фильтр по поиску компаний с тремя параметрами --Цена От и ДО,Город и категория. Можно посмотреть работу фильтра онлайн ...

Поиск по определенному или двум и более параметрам в List.Find
Есть структура public struct Note { //из списка группы public string firstName; //имя public...

Как сгруппировать пользователей сайта?
Всем привет! А вы не знаете как сгруппировать пользователей сайта, например, обычные пользователи и пользователи премиум которые имеет...

6
5984 / 4559 / 1095
Регистрация: 29.08.2013
Сообщений: 28,197
Записей в блоге: 3
13.03.2022, 11:05
а если у пользователя 3 почта как у 4?
0
0 / 0 / 0
Регистрация: 21.05.2020
Сообщений: 5
13.03.2022, 13:47  [ТС]
Тогда 4-й тоже должен быть в группе.
Цель в том чтобы найти все аккаунты созданные одним человеком.
0
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
13.03.2022, 15:54
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
with s as
(
 select
  UserID, Name, Email, UserID as grp, cast(formatmessage('/%d/', UserID) as varchar(max)) as p
 from
  #a
 
 union all
 
 select
  a.UserID, a.Name, a.Email, s.UserID as grp, b.p + s.p
 from
  s join
  #a a on a.UserID > s.UserID and (a.Name = s.Name or a.Email = s.Email) cross apply
  (select cast(formatmessage('/%d', a.UserID) as varchar(max))) b(p)
 where
  s.p not like '%' + b.p + '/%'
)
select
 x.*
from
 (
  select top (1) with ties grp, UserID, Name, Email from s order by row_number() over (partition by UserID order by grp)
 ) x
order by
 grp, UserID;
Добавлено через 14 минут
Так правильнее
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
with s as
(
 select
  UserID, Name, Email, UserID as grp
 from
  #a
 
 union all
 
 select
  a.UserID, a.Name, a.Email, s.UserID as grp
 from
  s join
  #a a on a.UserID > s.UserID and (a.Name = s.Name or a.Email = s.Email)
),
x as
(
 select
  UserID, Name, Email, grp, count(*) over (partition by grp) as c
 from
  s
)
select
 UserID, Name, Email, grp
from
 (select top (1) with ties * from x order by row_number() over (partition by UserID order by c desc)) t
order by
 grp, UserID;
1
5984 / 4559 / 1095
Регистрация: 29.08.2013
Сообщений: 28,197
Записей в блоге: 3
13.03.2022, 16:36
invm, а как оно так работает? - s объявляется в начале, но используется внутри
что находится в таблице s?
0
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
13.03.2022, 17:25
qwertehok, это рекурсивное CTE
http://www.sql-tutorial.ru/ru/... e_cte.html
1
0 / 0 / 0
Регистрация: 21.05.2020
Сообщений: 5
29.03.2022, 12:00  [ТС]
Спасибо за Ваше решение, но, к сожалению оно не покрывает некоторые случаи. Вот пример дополненных данных. Пользователь 10 и 11 должны были попасть в группу 2, но не попали
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 create table #a (UserID int, Name varchar(25), Email Varchar(50))
 
insert into #a
values
(1, 'Marvin Cottrell', '123456@gmail.com'),
(2, 'Colleen Morrison', 'somebody@gmail.com'),
(3, 'Colleen Morrison', 'cm@gmail.com'),
(4, 'Dante Henry', '765@gmail.com'),
(5, 'Willie Alcock', '123456@gmail.com'),
(6, 'Marvin Cottrell', 'lib@gmail.com'),
(7, 'Cecilia Mueller', '765@gmail.com'),
(8, 'Cathal Compton', '765@gmail.com'),
(9, 'Giovanni Tapia', '123456@gmail.com'),
(10, 'Humphrey Macias', 'somebody@gmail.com'),
(11, 'Humphrey Macias', '11111@gmail.com')
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.03.2022, 12:00
Помогаю со студенческими работами здесь

Поиск значения по двум двум параметрам (вертикали и горизонтали)
Добрый день! Прошу, пожалуйста, помощи. Никак не могу понять ,какие формулы необходимо применить. Имеем: таблицу шашечного...

Как посчитать количество ячеек по двум параметрам
Помогите пожалуйста! Мне нужно посчитать количество ячеек по двум параметрам: пол и возраст. причем возраст расчитан по формуле...

Как реализовать фильтр по двум параметрам в БД SQL
Здравствуйте! Сделав фильтр с одним параметро у меня получилось. А с двумя не получается. Проблема в следующем: У меня два текстбокса,...

Как осуществить поиск по одному и по нескольким параметрам?
Помогите если не трудно! у меня маленький такой вопросик.Есть одна таблица,допустим предприятий, в этой таблице есть столбец 'виды...

По заданным двум страницам определить принадлежат ли они одному и тому же листу или разным
Помогите пожалуйста решить задачи по программированию. 1. Страницы в книгах как правило нумеруются натуральным числами 1, 2, 3, ... таким...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru