0

我的数据有 3 组变量(set1_a,b,c,) (set2_x,y), (set3_n),如下所示。对于每个组,如果至少有 1 个变量,value>90那么我算作 1。

然后,我对计数求和。

我下面的代码工作正常。但是,我想将所有内容放在 1 个选择语句中。你能帮忙吗?

Create TABLE have  (
    id varchar(225),
    set1_a varchar(225),
    set1_b varchar(225),    
    set1_c varchar(225),
    set2_x varchar(225),
    set2_y varchar(225),    
    set3_n varchar(225)   
);
Insert into have (id,set1_a,set1_b,set1_c,set2_x,set2_y,set3_n) values (1,1,3,200,1,1,5);
Insert into have (id,set1_a,set1_b,set1_c,set2_x,set2_y,set3_n) values (2,1,3,200,200,1,5);
Insert into have (id,set1_a,set1_b,set1_c,set2_x,set2_y,set3_n) values (3,1,3,200,200,1,500);
Insert into have (id,set1_a,set1_b,set1_c,set2_x,set2_y,set3_n) values (4,1,3,1,1,1,500);
select * from have;

SELECT id,set1_a,set1_b,set1_c,set2_x,set2_y,set3_n,N1,N2, count1+count2+count3 as total_count FROM
(
select id,set1_a,set1_b,set1_c,set2_x,set2_y,set3_n, 
case
  when (set1_a >90 or set1_b>90 or set1_c>90) then 1 else 0
end as count1,
case
  when (set2_x >90 or set2_y>90) then 1 else 0 
end as count2
case
  when (set3_n >90) then 1 else 0 
end as count3
from have
) 
--WHERE N1+N2>=2
;
4

1 回答 1

0

这行得通。此外,理想情况下,数据类型应该是int而不是varchar因为您正在与int.

SELECT id,set1_a,set1_b,set1_c,set2_x,set2_y,set3_n,
(case 
  when greatest(
    cast(set1_a as int), 
    cast(set1_b as int),
    cast(set1_c as int)
  )>90 then 1 else 0 end) +
(case 
  when greatest(
     cast(set2_x as int),
     cast(set2_y as int)
   )>90 then 1 else 0 end) +
(case
  when cast(set3_n as int) > 90 
  then 1 else 0 end 
) as total_count
from have

DB fiddle on postgres 11 同样。但这都是标准的sql。

于 2021-01-29T20:14:34.247 回答