SQL 中使用查询的百分比

时间:2021-05-19 14:11:41

标签: sql oracle percentage

这是我的表格,我想找出疫苗接种日期1 不为空的人数百分比。 我的猜测是,它看起来像

SELECT COUNT(SSRN) FROM CITIZEN WHERE VACCINATION_DATE1 IS NOT NULL/COUNT(SSRN) FROM CITIZEN

但我不确定,有什么想法吗?

CREATE TABLE CITIZEN(
fname varchar(60) not null,
lname varchar(60) not null,
citizen_id varchar(10) not null,
ssrn number(20) primary key,
birthday date not null,
age number(3),
adress varchar(60) not null,
adr_num number(15) not null,
postal_code number(15)not null,
town varchar(60),
state varchar(60),
country varchar(60)not null,
vaccine varchar(15),
vaccination_date1 char(1),
vaccination_date2 char(1),
constraint citizen_country_fk foreign key (country) references country(country_name),
constraint citizen_vaccine_fk foreign key (vaccine) references vaccine(vaccine_id)
);

3 个答案:

答案 0 :(得分:1)

我会使用avg()

select avg(case when vaccination_date1 is not null then 1.0 else 0 end) 
from citizen;

如果您想要一个介于 0 和 100 之间的值:

select avg(case when vaccination_date1 is not null then 100.0 else 0 end) 
from citizen;

如果您希望将其格式化为带有 % 的字符串:

select to_number(avg(case when vaccination_date1 is not null then 100.0 else 0 end), 'FM990.00') || '%'
from citizen;

答案 1 :(得分:0)

最简单和最有效的方法是在单个查询中完成整个计算。像这样:

select count(case when vaccination_date1 is not null then 1 end) / count(*)
from .....

这将返回一个数字,例如 0.45;留给您将其显示为百分比 (45%),并为该列指定一个合理的别名。

答案 2 :(得分:0)

您不需要任何 CASE 表达式,因为 <input type="text" name="celular" placeholder="Ej. 6756892" maxlength="8" id="telefono" oninput="this.value = this.value.replace(/[^0-9.]/g, '').replace(/(\..*)\./g, '$1');" > 只计算非空值。因此你可以使用:

count
相关问题