2017-06-13 3 views
-2

Ich habe eine kleine Datenbank zusammengestellt, um einige Akkumulatorwetten zu verfolgen, die einige meiner Kollegen und ich während der Fußballsaison platzieren. Jetzt muss ich eine Funktion schreiben, um die Gewinne für jede Auswahl zu berechnen. Die Schlüsseltabelle ist eine Auswahl mit den Schlüsselfeldern für die Funktion odds und result_id, wobei eine result_id von 1 ein Gewinn ist. Der Einsatz wird in der Wett-Tabelle gespeichert. Unten ist die Auswahltabelle, die zwei Gewinner für bet_id 1 hat, also wäre die resultierende Gleichung ((@stake * 1.40) * 1.40). Gibt es eine Möglichkeit, einen Cursor oder eine Set-basierte Methode zu verwenden, um diesen Wert zu generieren?Bedingte Iteration durch jeden Wert in einer Spalte

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 
+0

Sollte dazu keinen Cursor benötigen. Was verbindet die Wette-Tabelle mit der Auswahltabelle? Bet_id? – Leonidas199x

+3

Hier ist ein großartiger Ort, um zu beginnen. http://spaghettidba.com/2015/04/24/how-to-post-a-t-sql-question-on-a-public-forum/ –

+1

Ja, ich verstehe Ihre Frage überhaupt nicht. –

Antwort

0

Sie Unter der Annahme kommen auf bet_id:

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

eine Gruppe multiplizieren wir die folgende Beziehung verwenden:

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

Und deshalb für die Multiplikation

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

Zur Berechnung die Faktoren

bet_id | odds_factor 
1  | 1.40 * 1.40 = 1.96 

verwenden wir die Common Table Expression CTE in dieser Abfrage

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 

was sollte (ungetestet) ergeben

bet_id | stake | odds_factor | total_odds 
1  | 10.0 | 1.96  | 19.6 
0

Ich glaube, das ist so einfach wie:

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 
Verwandte Themen