SQL / redshift 中的另一个百分比问题

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

这就是我现在所在的地方......

table1 看起来像这样(是的,就像这里的大多数帖子一样,这是实际表格的总体简化)

用户ID 类型
12345
67893
32389
88733
23580

表2看起来像这样

用户ID 随机不重要数据
12345 随机1
32389 随机2
88733 随机3

澄清一下,table1 比 table2 有更多的 userid,table2 是 table1 的子集。

我的目标是确定 table2 中的每个 userid 对于 table1 中给定的 type 有多少个,其中我显示 ColumnA 是类型,ColumnB 是与 table2、ColumnC 中的该类型匹配的总 userid是 table1 中每种类型的 userid 的总和,columnC 的计算方式为 ColumnB 除以 ColumnC。

最终的输出应该是这样的:

类型 类型_计数 总类型计数 百分比_渗透率
1202 1900 63.xx%
674 873 77.xx%

我已经走到这一步了:

select type, count(*) as type_count
from table1
where userid in (
    select distinct owner as userid
    from table2
    )
and report_date = 'yyyy-mm-dd'
group by type
order by type_count desc
;

这会生成一个如下所示的表格

类型 类型_计数
1202
674

到目前为止,我的工作基本上满足了我的需要,但之后仍然需要一些手动工作,我正在努力解决这个问题,因为它无法扩展。

我正在寻找有关如何完成最后一英里的指导。

提前致谢

sql mysql amazon-redshift
1个回答
0
投票

我想你不想要类似的东西

select type, count(b.userid) as type_count, count(a.userid) as total_type_count, (100.0 * count(b.userid)) /  coount(a.userid) as  percent_penetration
from table1 a left join table2 b on a.userid = b.userid
where report_date = 'yyyy-mm-dd'
group by type
order by type_count desc;

count(fieldname) 只统计非空值,当 table2 中通过左连接没有记录时 b.userid 为 null...

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