Фильтрация SQL для отображения только строк, имеющих значение в одном столбце, отображается несколько раз

#sql

#sql

Вопрос:

Представьте, что у меня есть набор данных, который выглядит следующим образом

 C1 | C2 | C3 | C4 | C5
1   NA  NA  NA      34
2   NA  NA  NA      39
3   NA  NA  NA      29
4   NA  NA  NA      17
5   NA  NA  NA      17
6   NA  NA  NA      34
  

Если я хочу вернуть только те строки, где в C5 существуют дубликаты, как мне это сделать? Поэтому я бы хотел, чтобы строки 1 и 6, а также 4 и 5.

Комментарии:

1. На какую базу данных вы ссылаетесь?

Ответ №1:

Простой метод exists :

 select t.*
from t
where exists (select 1 from t t2 where t2.c5 = t.ct and t2.c1 <> t.c1);
  

Вы также можете использовать оконные функции:

 select t.*
from (select t.*, count(*) over (partition by c5) as cnt
      from t
     ) t
where cnt >= 2;
  

Комментарии:

1. Если таблица t является результатом нескольких объединений таблиц, как мне включить эту логику? Похоже, SQL не нравится предложение where exist, когда у меня смешаны соединения

2. @j_nj . , , вы можете определить t с помощью CTE с любым запросом. Или просто используйте вторую версию.

3. я никогда не использовал CTE, не могли бы вы помочь объяснить это? Также моя текущая версия MySQL не может запускать функции Windows, и я пока не могу обновиться, так что, к сожалению, на данный момент это невозможно

4. with t as (<your query here>) select . . .