sql。如何根据其他列的值 select 行?

sql. how to select rows based on values of other columns?

我的 sql 有问题。我的 table 如下:

Id                column_1         column_2          
1                 name_1              yes            
2                 name_1              no               
3                 name_1              yes              
4                 name_2              no              
5                 name_2              no              
6                 name_3              yes              
7                 name_3              yes              
8                 name_3              yes              
9                 name_3              yes                
10                name_4              yes              
11                name_4              no          

我想要得到的输出:

 Id               column_1         column_2          
1                 name_1              yes            
2                 name_1              no               
3                 name_1              yes                           
10                name_4              yes         
11                name_4              no   

我的目标是获取列值为'yes'和'no'的行。 如果只有 'yes' 并且只有 'no' - 那么他们不需要被选举。

注意: 我曾考虑使用 decode()case when..,但据我所知,这不是解决方案。

我们可以尝试在子查询中使用条件聚合函数和window函数,然后将其与您的逻辑进行比较。

SELECT
  id,   
  column_1, 
  column_2  
FROM (
    SELECT t1.*,
           COUNT(CASE WHEN column_2 = 'yes' THEN 1 END) OVER(PARTITION BY column_1) yesCnt,
           COUNT(CASE WHEN column_2 = 'no' THEN 1 END) OVER(PARTITION BY column_1) noCnt,
           COUNT(*) OVER(PARTITION BY column_1) allCnt
    FROM T t1
) t1
WHERE  (yesCnt <> allCnt AND noCnt <> allCnt)

sqlfiddle

你可以为此使用 exists

这里是fiddlehttps://www.db-fiddle.com/f/bhBbqgnnexoKhESvAJB5c1/0

   select * from mytable a
    where exists (select 'Roll' from mytable b where a.column_1 = b.column_1 and b.column_2 = 'yes')
    and exists (select 'Tide' from mytable c where a.column_1 = c.column_1 and c.column_2 = 'no')