#sql #postgresql
#sql #postgresql
Вопрос:
Дана таблица соединений, показывающая, какие страны ( c
) посетили какие лица ( p
):
--- ---
| c | p |
--- ---
| 1 | 1 |
| 2 | 2 |
| 2 | 3 |
| 3 | 1 |
| 3 | 4 |
--- ---
Я ищу запрос, который сообщает для данной страны, посещал ли ее кто-то, кто тоже посетил другую страну. Итак, в этом примере этот запрос должен возвращать true для стран 1 и 3.
Ответ №1:
Сложность больше в том, как вы хотите видеть результаты, предполагая, что мы можем просто объединить их:
select string_agg(c::text,',')
from foo
group by p
having count(distinct c) > 1
DBFiddle : https://dbfiddle.uk/?rdbms=postgres_11amp;fiddle=8b81477bbf205f3792756e53bf03e22a
Ответ №2:
Попробуйте этот код :
SELECT c
FROM tbl
WHERE p IN (SELECT p
FROM tbl
GROUP BY p
HAVING COUNT(DISTINCT c) > 1)