Как сделать так, чтобы сумма весового параметра равнялась 1, сгруппированной по части ключа? - PullRequest
0 голосов
/ 17 февраля 2012

У меня есть две таблицы в моей настройке. Один с продавцами и там доходами. Каждый продавец знает только свой общий доход. За этот конкретный период дохода их просят дать оценку своего дохода как частному, так и малому бизнесу или крупному бизнесу. Эта информация заносится во вторую таблицу.

Income
=================
SalesPerson
Income

Distribution
=============================
SalesPerson
CustomerType
Weight

Теперь мой запрос будет выглядеть примерно так:

SELECT
  Income.SalesPerson,
  Distribution.CustomerType,
  Income.Income * Distribution.Weight as DistributedIncome
FROM
  Income INNER JOIN Distribution ON
    Income.SalesPerson = Distribution.SalesPerson

Как бы я обеспечил, чтобы SUM(Weight) = 1 для каждого SalesPerson в Distribution?

1 Ответ

1 голос
/ 17 февраля 2012

Нормализуем по сумме, согласно тем же критериям.

SELECT
  Income.SalesPerson,
  Distribution.CustomerType,
  Income.Income * Distribution.Weight/(
    select sum(d.weight)
    from distribution d
    inner join income i on i.salesperson = d.salesperson
  )
  as DistributedIncome
FROM
  Income INNER JOIN Distribution ON
    Income.SalesPerson = Distribution.SalesPerson

Если каким-то образом вы хотите выбрать неизмененные веса, равные 1, то я считаю, что у вас есть случай проблемы subset sum , и вы, вероятно, не сможете решить ее с помощью SQL-запроса. .

...