提问人:NEWBIE 提问时间:9/21/2023 最后编辑:NEWBIE 更新时间:9/21/2023 访问量:36
对分类值进行语句处理时的大小写
Case when statement to categorized values
问:
TABLE_1:
Col_1 | Col_2 | Col_3 |
---|---|---|
一个 | 苹果 | 100 |
一个 | 苹果 | 100 |
一个 | 苹果 | 56 |
一个 | 苹果 | 44 |
B | 香蕉 | 100 |
C | 黄瓜 | 93 |
C | 黄瓜 | 7 |
我想使用一个案例 when 语句将 Col 1 归类为“好”或“坏”到一个新列中。我提出了以下查询:
SELECT DISTINCT
Col_1
, CASE WHEN Col_3 = 100 THEN 'good'
ELSE 'bad'
END AS STATUS
FROM TABLE_1
这会导致以下TABLE_2:
Col_1 | 地位 |
---|---|
一个 | 好 |
一个 | 坏 |
B | 好 |
C | 坏 |
我该如何解决这个问题,以便如果 A 既好又坏,它只会处于坏状态?我希望TABLE_3成为我的结果
TABLE_3:
Col_1 | 地位 |
---|---|
一个 | 坏 |
B | 好 |
C | 坏 |
答:
0赞
Littlefoot
9/21/2023
#1
也许是这样的事情?
示例数据:
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>
0赞
ekochergin
9/21/2023
#2
你可以通过使用 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”
0赞
nbk
9/21/2023
#3
您可以 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 | 地位 |
---|---|
一个 | 坏 |
B | 好 |
C | 坏 |
评论
case