需要帮助思考如何解决此问题的逻辑。
我有一个SQL表,其中包含一些名称和一些附带信息-例如-公司名称及其所投资的区域(在同一区域中可能有多个投资)。每一行代表该公司,区域,因此可以有多个具有相同区域的行。因此,同一家公司可能会有多行。我正在尝试根据地区集中度为公司贴标签。
Column1 Column2
CompanyA NYC
CompanyA NYC
CompanyA NYC
CompanyA SF
CompanyA SF
CompanyA DC
然后,我将要根据公司A的整体风险来为其创建标签。因此,如果说其曝光量的85%或更多在一个区域内,那么我将其标记为“集中”, 如果其曝光量的不足85%但超过50%分布在两个区域之间,则“聚焦”否则“分散”。我希望每个公司的输出都带有我分配的标签。我将不得不在SQL中执行此操作,但是任何有关逻辑或伪代码的帮助都将帮助我开始思考这个问题。
所以我的输出应如下所示:
Column1 Column2
CompanyA Focused
答案 0 :(得分:3)
您希望最高区域中的百分比占整体百分比。您可以使用两种级别的聚合和窗口函数来做到这一点:
select company,
(case when max(cnt) >= 0.85 * sum(cnt)
then 'focused'
when sum(case when seqnum <= 2 then cnt end) >= 0.8 * sum(cnt)
then 'concentrated'
else 'diversified'
end) as category
from (select company, region, count(*) as cnt,
row_number() over (partition by company order by count(*) desc) as seqnum
from t
group by company, region
) cr
group by company;