oracle sql, идентификаторы, группировка по одному столбцу, несколько различных в другом столбце - PullRequest
1 голос
/ 31 марта 2020

Я пытаюсь выяснить, как написать запрос для этого. У меня есть два идентификатора в таблице ID1 и ID2. Вот что я хочу.

Хочу

  1. ID2 имеет количество (ID2)> 1
  2. количество различных ID1> 1

Я не уверен, как это сделать с Oracle SQL. Я написал код, чтобы сделать группу. Тем не менее, у меня возникли проблемы с получением остальной части кода для работы, в том числе часть, где количество различных ID1> 1. Я опубликую больше кода, как только получу больше кода.

Данные

ID1 ID2
1   33
1   33
5   44
6   44
7   8

Хотите

ID1 ID2
5   44
6   44

Код попытки

select ID2, 
COUNT(*) 
from TABLE1 
GROUP BY ID2
HAVING COUNT(*)>1

1 Ответ

2 голосов
/ 31 марта 2020

Если вам нужны целые строки, вы можете использовать оконные функции. В отличие от некоторых других баз данных, Oracle поддерживает COUNT(DISTINCT ...) в качестве оконной функции, так что это легко сделать с помощью:

select id1, id2
from (select t.*, count(distinct id1) over(partition by id2) cnt from mytable t)
where cnt > 1

Демонстрация на БД Fiddle :

ID1 | ID2
--: | --:
  5 |  44
  6 |  44
...