簡體   English   中英

SQL 中使用查詢的百分比

[英]Percentage in SQL using query

這是我的表格,我想找出接種日期 1 不是 null 的人的百分比。 我的猜測是,它看起來像

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)
);

我會使用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;

最簡單和最有效的方法是在單個查詢中完成整個計算。 像這樣的東西:

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

例如,這將返回一個類似 0.45 的數字; 留給您將其顯示為百分比 (45%),並為該列指定一個合理的別名。

您不需要任何 CASE 表達式,因為count只計算非空值。 因此,您可以使用:

select count(*) as citizen_count
     , count(vaccination_date1) as vaccinated
     , round(100 * count(vaccination_date1)/count(*)) as percent_vaccinated
from   citizen;

CITIZEN_COUNT VACCINATED PERCENT_VACCINATED
------------- ---------- ------------------
          107         35                 33

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM