Условное повторение каждого значения в столбце

Я собрал небольшую базу данных, чтобы отслеживать некоторые ставки на аккумуляторы, которые некоторые из моих коллег и я разместили в течение футбольного сезона. Теперь мне нужно написать функцию для вычисления выигрышей для каждого выбора. Таблица ключей - это выбор с ключевыми полями для функции, являющейся коэффициентом и result_id, где result_id из 1 - выигрыш. Ставка хранится в таблице ставок. Ниже представлена таблица выбора, которая имеет два победителя для bet_id 1, поэтому полученное уравнение будет ((@stake * 1.40) * 1.40). Есть ли способ использовать курсор или метод на основе набора для генерации этого значения?

bet_id  punter_id   team_id odds    result_id   ground_id
1       1           24      1.40    1           1
1       1           48      1.60    2           1
1       1           89      1.60    2           1
1       2           8       1.40    1           1
1       2           11      1.60    2           1
1       2           107     1.60    2           1
-2
13 июн. '17 в 15:37
источник поделиться
2 ответа

Предполагая, что вы присоединяетесь к bet_id:

CREATE TABLE bet (bet_id int NOT NULL PRIMARY KEY, 
                  stake float NOT NULL); -- or some floating point number type

Для умножения группы мы используем следующее соотношение:

log( a * b * c ) = log(a) + log(b) + log(c)

И поэтому для умножения

a * b * c = exp( log( a * b * c ) ) = exp( sum( log(.) ) )

Чтобы вычислить факторы

bet_id | odds_factor 
1      | 1.40 * 1.40 = 1.96

в этом запросе мы используем выражение CTE Common Table Expression

WITH factor( bet_id, odds_factor ) AS 
  ( SELECT bet_id, exp( sum( log( odds ) ) ) 
    FROM selection 
    WHERE result_id = 1  -- only winning odds in the grouping
    GROUP BY bet_id ) 
SELECT b.bet_id, 
       b.stake, 
       f.odds_factor, 
       b.stake * f.odds_factor AS "total_odds" 
FROM bet b
INNER JOIN factor f 
ON b.bet_id = f.bet_id 
-- ORDER BY b.bet_id -- optional ordering for readability

которые должны давать (непроверенные)

bet_id | stake | odds_factor | total_odds 
1      | 10.0  | 1.96        | 19.6
0
13 июн. '17 в 23:38
источник

Думайте, что это так просто:

SELECT      B.BET_ID, 
            S.PUNTER_ID,
            ((B.stake * S.odds) * S.odds)
FROM        BET         AS B
INNER JOIN  SELECTION   AS S ON B.Bet_id = S.Bet_id
WHERE       S.result_id = 1
0
14 июн. '17 в 8:12
источник

Посмотрите другие вопросы по меткам или Задайте вопрос