对分类值进行陈述时的情况

问题描述 投票:0回答:3

表_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 oracle case
3个回答
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
投票

您只需使用 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
投票

您可以 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 不好

小提琴

© www.soinside.com 2019 - 2024. All rights reserved.