Запрос возврата значений строк, имеющих одинаковые значения во всех строках для каждого отдельного значения одного столбца. - PullRequest
0 голосов
/ 13 марта 2020

Например, у меня есть следующие данные:

screenshot of an example

Я хочу отобразить только 2-ю, 3-ю, 5-ю строку, потому что все значения A1, A2, A3, A4 то же самое для каждого A6 в (01, 02, 03) (каждая строка должна иметь каждое значение A6). Поэтому я хочу исключить только 4-й столбец.

Ответы [ 2 ]

0 голосов
/ 13 марта 2020

Если вы хотите, чтобы строки, в которых A2 / A3 / A4 имели дубликаты, можно использовать оконные функции:

select t.*
from (select t.*,
             count(distinct (case when a6 in (1, 2, 3) then a6 end) over (partition by a2, a3, a4) as cnt
      from t
     ) t
where cnt > 1;
0 голосов
/ 13 марта 2020

Я понимаю, что вам нужны записи, для которых все значения 1, 2 и 3 доступны для данного (a1, a2, a3, a4) кортежа.

Вот один из способов сделать это, присоединившись к таблица с совокупным подзапросом:

select t.*
from mytable t
inner join (
    select a1, a2, a3, a4
    from mytable t1
    where a6 in (1, 2, 3)
    group by a1, a2, a3, a4
    having count(distinct a6) = 3
) g 
    on  g.a1 = t.a1 
    and g.a2 = t.a2 
    and g.a3 = t.a3 
    and g.a4 = t.a4

Также можно выполнить фильтрацию с помощью коррелированного подзапроса:

select t.*
from mytable t
where (
    select count(distinct a6) 
    from mytable t1
    where t1.a1 = t.a1 and t1.a2 = t.a2 and t1.a3 = t.a3 and and t1.a4 = t.a4
) = 3
...