首页 > 解决方案 > SQL:连接表格并将每个单元格除以另一个表格中的匹配单元格?

问题描述

这是我的人口数据集,详细说明了 2010 年至 2019 年每个州的人口:

人口数据集

这是我的消费者投诉数据集,其中包含收到日期和状态:

消费者投诉数据集

我已经收到了每年每个州的投诉:

每年的州

我知道我需要在 state 上加入 compltsbypear 和 uspop,并在每个比赛年度将 2011(来自投诉)/ 2011 与 uspop 等分开。

如何编写显示各州以及每年投诉与人口比率的查询?

标签: sqljoinmatchunionwhere-clause

解决方案


我会通过不透视人口数据来解决这个问题,因此每个州和每年都有一行。然后汇总投诉和join

您的代码看起来像 SQL Server,所以我将使用这些约定:

with up as (
      select v.*
      from uspop u cross apply
           (values (u.area, 2010, u.[2010]),
                   (u.area, 2011, u.[2011]),
                   . . . 
          ) v(state, year, pop)
     ),
     cc as (
      select year(datereceived) as year, state, count(*) as num_complaints
      from consumercomplaints cc
      group by year(datereceived), state
     )
select up.state, up.year, cc.num_complaints, up.pop,
       (cc.num_complaints * 1.0 / up.pop) as complaint_ratio
from up join
     cc
     on up.state = cc.state and up.year = cc.year;

这会以每个州/年一行的完全合理的格式产生您想要的结果。如果您希望它采用不同的格式,您似乎知道如何旋转数据。


推荐阅读