Как бы вы реализовали этот запрос?Набор записей или Sql - PullRequest
2 голосов
/ 13 июня 2011

Я только что увидел этот вопрос в тесте на собеседование, которое я взял несколько дней назад, у меня есть следующая таблица

Region Company Sales ratio_of_sales_in_region  percentile_in_region
 NA     A1      1000            0.25                25
 NA     A2      1000             0.25                50
 NA     A3      1000             0.25                75
 NA     A4      1000             0.25                100 
 EU     B1      2000            0.5                  50
 EU     B2      1000             0.25                75
 EU     B3      1000             0.25                100
.......

Мне нужно извлечь компанию с 30-м процентилем и продажи для каждого региона, результат будет1004 *

Region  30th_percentile_company  30th_percentile_sales
NA           A2                       (1000*0.25 + 500 * 0.05)
EU           B1                        2000    (as B1 accounts for more than 30%)

В запросе необходимо проверить наличие вышеуказанных условий, например, если на компанию уже приходится более 30%, а также принять значение 30-процентных продаж для каждого региона.

РЕДАКТИРОВАТЬ:Я попытался объяснить, что означает процентиль, добавив новый столбец.Я был сбит с толку, но увидел таблицу результатов, которая была запрошена, и она прояснила, что они имели в виду под 30-м процентилем

1 Ответ

0 голосов
/ 15 июня 2011
SELECT
   Region,
   MIN(Company) as [30th_percentile_company],  --potentially, two companies would from the same region would have the exact same percentile_in_region.
FROM
(
SELECT
   Region,
   MIN(percentile_in_region) as percentile_in_region
WHERE
   percentile_in_region > 30
GROUP BY
   Region
) a

INNER JOIN
   TableName T1
ON
   T1.Region = a.Region
   AND T1.percentile_in_region = a.precentile_in_region

GROUP BY
   Region
...