【问题标题】:SQL query to find: X% of A is attributed to Y% of BSQL 查询查找:A 的 X% 归因于 B 的 Y%
【发布时间】:2018-09-26 09:07:46
【问题描述】:

我被要求调查招聘数据库中的一些统计数据。我被要求得到的数字是:

X% 的申请转到 Y% 的工作

包含应用程序和工作信息的表非常简单,架构看起来像这样(简化):

create table jobs (jobId int, jobTitle varchar(100))
create table applications (applicationId int, jobId int)

SQL Fiddle

我很难想象统计数据代表什么,更不用说如何将其表述为 SQL 查询了。

这样做的目的是确定是否有工作往往比其他工作吸引更多的申请,以及吸引的幅度有多大。这是一种常见的模式吗?如果有,是否有正式名称,如何写成 T-SQL 查询?

【问题讨论】:

  • 你应该真正向我们展示预期的输出是什么。
  • @TimBiegeleisen X% 的申请以及他们所归属的工作的百分比。

标签: sql tsql statistics data-analysis


【解决方案1】:

试试这个

SELECT CONVERT(NVARCHAR,CONVERT(float,(select COUNT(applicationId) FROM applications WHERE jobId = j.jobId))/(select COUNT(*) FROM applications) * 100) +'% of applications go to ' + CONVERT(NVARCHAR,(1.00 /(SELECT COUNT(*)FROM jobs) * 100)) +'%' AS [OUTPUT] FROM jobs j

【讨论】:

    【解决方案2】:

    当我试图理解这一点时,我认为它试图表明一些工作比其他工作获得更多的申请。例如,考虑 100 个工作,其中 99 个实际上没有申请,剩下的一个有所有其余的。然后你会说“100% 的申请适用于 1% 的工作”。这是一个极端的例子,展示了一个有用的证据。

    同样明显的是,“100% 的申请去 100% 的工作”。

    您可以做的最详细的事情是获得前 1 个工作,然后是前 2 个工作等,直到所有工作都包括在内并计算应用程序。

    我认为这会给你所有 X-Y 对:

    select j.jobId,count(*) as appcount
    into #a
    group by j.jobId
    from jobj j 
    inner join applications a on j.jobId=a.jobId
    
    declare @sumjobs int =(select count(*) from #a)
    declare @sumapps int =(select sum(appcount) from #a)
    
    select
        100*sum(appcount) over (order by appcount ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)/@sumapps as X,
        100*sum(1) over (order by appcount ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)/@sumjobs as Y
    from #a
    

    请注意,您需要有 sql server 2012+ 才能正常工作。 如果这不起作用,请提供示例数据以便我们对其进行测试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-15
      • 2022-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-13
      • 2012-01-28
      相关资源
      最近更新 更多