sql - SQL:连接表格并将每个单元格除以另一个表格中的匹配单元格?
问题描述
这是我的人口数据集,详细说明了 2010 年至 2019 年每个州的人口:
这是我的消费者投诉数据集,其中包含收到日期和状态:
我已经收到了每年每个州的投诉:
我知道我需要在 state 上加入 compltsbypear 和 uspop,并在每个比赛年度将 2011(来自投诉)/ 2011 与 uspop 等分开。
如何编写显示各州以及每年投诉与人口比率的查询?
解决方案
我会通过不透视人口数据来解决这个问题,因此每个州和每年都有一行。然后汇总投诉和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;
这会以每个州/年一行的完全合理的格式产生您想要的结果。如果您希望它采用不同的格式,您似乎知道如何旋转数据。
推荐阅读
- angular - 用于大量未指定显示的角数管 (E+45)
- sql - 如何在 MS Access 中根据日期删除多个重复项
- r - dplyr::pull 与 purrr::pluck 和 magrittr::extract2 的区别是什么?
- c++ - 如何使用一维数组列表初始化二维数组?
- php - PHP rtrim 函数修剪多余的字符?为什么?
- mysql - python mysql中表名的占位符
- android - Koin 测试 - DependencyResolutionException
- vba - 如何将新的 Outlook 任务移动到非默认任务文件夹中?
- r - 如何使用 rgdal 将 EPSG:4326 坐标转换为 EPSG:3857 in r?
- reactjs - 如何通过 ReactJs 在 Mobx 中使用没有装饰器的“注入”