SQL-запрос для поиска: X% от A относится к Y% от B - PullRequest
0 голосов
/ 26 сентября 2018

Меня попросили изучить некоторые статистические данные в базе данных по набору персонала.Показатель, который меня попросили получить:

X% заявок переходят на Y% рабочих мест

Таблицы, содержащие информацию о приложениях и вакансиях, очень просты, иСхема выглядит так (упрощенно):

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

SQL Fiddle

Я изо всех сил пытаюсь визуализировать, что представляет статистика, не говоря уже о том, как сформулировать это как запрос SQL.

Цель этого состоит в том, чтобы определить, есть ли рабочие места, которые имеют тенденцию привлекать больше приложений, чем другие, и в какой степени.Это общий шаблон?Если да, существует ли для него формальное имя и как его можно записать как запрос T-SQL?

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Попробуйте это

ВЫБРАТЬ КОНВЕРТ (NVARCHAR, КОНВЕРТ (float, (выберите COUNT (applicationId) ИЗ приложений, ГДЕ jobId = j.jobId)) / (выберите COUNT (*) ИЗ приложений) * 100) +«% приложений переходят на» + CONVERT (NVARCHAR, (1,00 / (ВЫБРАТЬ СЧЕТЧИК (*) ИЗ ЗАДАНИЙ) * 100)) + «%» КАК [ВЫХОД] ОТ ЗАДАНИЙ j

0 голосов
/ 26 сентября 2018

Когда я пытаюсь понять это, я понимаю, что он пытается показать, что некоторые задания получают больше приложений, чем другие.Например, рассмотрим 100 рабочих мест, где у 99 фактически нет приложений, а у остальных - все остальные.Тогда вы скажете: «100% приложений уходят на 1% рабочих мест».Это крайний пример, демонстрирующий одно полезное доказательство.

Также очевидно, что «100% приложений уходят на 100% рабочих мест».

Самое подробное, что вы можете сделатьполучить первую работу, затем две лучшие работы и т. д., пока все они не будут включены, и рассчитать заявку.

Я думаю, что это даст вам все пары XY:

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+, чтобы это работало.Если это не помогает, предоставьте образцы данных, чтобы мы могли их протестировать.

...