这就是我现在所在的地方......
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 |
到目前为止,我的工作基本上满足了我的需要,但之后仍然需要一些手动工作,我正在努力解决这个问题,因为它无法扩展。
我正在寻找有关如何完成最后一英里的指导。
提前致谢
我想你不想要类似的东西
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...