我有两列person_type
和time_in
。我试图找到每个相应小时中person_type
的百分比。我的数据库如下:
person_type || time_in
FT N/A
FT 0
FT 4
FT 22
FT 23
NL 1
NL 2
NL 3
NL 4
NL 4
我正在尝试创建查询以返回以下输出:
% FT || time_in
100 N/A
100 0
0 1
0 2
0 3
33 4
100 22
100 23
我尝试了以下代码:
select (
(select count(*) from delivery where person_type = 'FT')
/count(*)) as 'FT %', time_in
from delivery
group by hour
order by hour;
这里的问题是我的子查询为每个time_in值返回5,所以我的当前输出如下:
% FT || time_in
500 N/A
500 0
500 1
500 2
500 3
166 4
500 22
500 23
如果我在子查询中按time_in分组,则会收到一条错误消息,指出查询返回的值不止一个。
答案 0 :(得分:0)
您可以使用条件聚合。为此,我认为avg()
是最简单的逻辑:
select time_in,
avg( person_type = 'FT' ) * 100 as percent_ft
from delivery
group by time_in
order by time_in;