Получить всех пользователей, у которых есть только 1 категория в SQL - PullRequest
0 голосов
/ 14 июля 2020

У меня есть эта таблица с U, который представляет «User», и C, который представляет «Category». Мне нужен способ узнать, сколько категорий есть у пользователя, и ограничить это числом 1. Итак, в основном мне нужно получить всех пользователей, у которых есть только одна категория. Как этого можно достичь с помощью SQL (PostgreSQL)?

Некоторое время я пытался найти какое-либо решение в Stackoverflow, но безуспешно.

id  U   C
1   3   5
2   1   3
3   3   5
4   5   2
5   11  5
6   11  5

Ожидаемый результат:

id  U   C
1   1   3
2   5   2

Ответы [ 3 ]

2 голосов
/ 14 июля 2020

Это просто с предложением HAVING:

SELECT max(id), u, max(c)
FROM atable
GROUP BY u HAVING count(c) = 1
1 голос
/ 14 июля 2020

Если у вас нет дубликатов, вы можете использовать not exists:

select t.*
from t
where not exists (select 1 from t t2 where t2.u = t.u and t2.c <> t.c);

Если у вас есть дубликаты u / c, просто используйте id:

select t.*
from t
where not exists (select 1 from t t2 where t2.u = t.u and t2.id <> t.id);

Если вы хотите переназначить порядковый номер, используйте также row_number():

select row_number() over (order by id) as new_id, t.*
from t
where not exists (select 1 from t t2 where t2.u = t.u and t2.c <> t.c);
1 голос
/ 14 июля 2020

Вы можете использовать оконные функции для ваших целей.

Оконные функции

SELECT DISTINCT * FROM(
SELECT a.*,count(c)over(partition by id) as cnt
FROM testtable a
) WHERE CNT=1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...