表_1:
第 1 栏 | 第 2 栏 | 第 3 栏 |
---|---|---|
A | 苹果 | 100 |
A | 苹果 | 100 |
A | 苹果 | 56 |
A | 苹果 | 44 |
B | 香蕉 | 100 |
C | 黄瓜 | 93 |
C | 黄瓜 | 7 |
我想使用 case when 语句将第 1 列分类为“好”或“坏”到新列中。我提出了以下查询:
SELECT DISTINCT
Col_1
, CASE WHEN Col_3 = 100 THEN 'good'
ELSE 'bad'
END AS STATUS
FROM TABLE_1
这会产生 TABLE_2:
第 1 栏 | 状态 |
---|---|
A | 好 |
A | 不好 |
B | 好 |
C | 不好 |
我该如何解决这个问题,以便如果 A 既好又坏,它只会采用坏状态?我希望 TABLE_3 成为我的结果
表_3:
第 1 栏 | 状态 |
---|---|
A | 不好 |
B | 好 |
C | 不好 |
也许是这样的?
样本数据:
SQL> with table_1 (col1, col2, col3) as
2 (select 'A', 'Apple', 100 from dual union all
3 select 'A', 'Apple', 100 from dual union all
4 select 'A', 'Apple', 56 from dual union all
5 select 'A', 'Apple', 44 from dual union all
6 select 'B', 'Banana' ,100 from dual union all
7 select 'C', 'Cucumber',93 from dual union all
8 select 'C', 'Cucumber', 7 from dual
9 )
查询:
10 select col1,
11 case when max(col3) = 100 and min(col3) < 100 then 'bad'
12 when max(col3) = 100 then 'good'
13 else 'bad'
14 end status
15 from table_1
16 group by col1;
COL1 STATUS
----- ----------
A bad
B good
C bad
SQL>
或者更简单
10 select col1,
11 min(case when col3 = 100 then 'good'
12 else 'bad'
13 end
14 ) status
15 from table_1
16 group by col1;
COL1 STATUS
----- ----------
A bad
B good
C bad
SQL>
您只需使用 min() 即可实现
SELECT DISTINCT Col_1
,CASE WHEN min(Col_3) = 100 THEN 'good' ELSE 'bad' END AS STATUS
FROM TABLE_1
group by col_1
order by col_1;
它将取 col_3 的最小值,并且当存在带有 < 100
的记录时将返回“bad”您可以 GROUP BY 并使用聚合函数
SELECT
Col_1
, MIN(CASE WHEN Col_3 = 100 THEN 'good'
ELSE 'bad'
END) AS STATUS
FROM TABLE_1
GROUP BY Col_1
COL_1 | 状态 |
---|---|
A | 不好 |
B | 好 |
C | 不好 |