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)
你可以为此使用 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')
我的 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)
你可以为此使用 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')