2016-06-05 1 views
0

Извините за запутанное название, не знал, как это сказать.Извлечение частного из двух SUM (col) JOIN ON разных значений

У меня есть таблица событий и таблица ставок на эти события. Я уже делаю ставку на общую сумму на каждом событии, но я также хочу получить коэффициенты (ака, частное от общей суммы для одной команды, деленной на общую сумму другой команды). Участник, делающий ставку, хранится в столбце horse таблицы data_bets.

Например, я хочу, чтобы добавить что-то вроде:

SELECT 
    SUM(data_bets.amount) WHERE data_bets.horse = data_events.challenger 
    /
    SUM(data_bets.amount) WHERE data_bets.horse = data_events.contestant 
AS bet_odds 

в существующий запрос ниже:

SELECT *, 
    SUM(data_bets.amount) AS total_pot, 
    COUNT(data_bets.member) AS total_bets, 
    COUNT(data_votes.member) AS total_votes, 
    data_platforms.name AS platform_name, data_platforms.icon AS platform_icon 
FROM data_events 
    LEFT JOIN data_bets ON data_bets.event=data_events.id 
    LEFT JOIN data_votes ON data_votes.content_type=2 AND data_votes.content_id=data_events.id 
    LEFT JOIN data_platforms ON data_platforms.id=data_events.platform 
WHERE status=1 
GROUP BY data_events.id 
ORDER BY total_pot DESC 

Возможно ли это сделать с одним запросом? Если это возможно, я бы предпочел, чтобы принести как challenger_odds и contestant_odds, как это:

SELECT 
    SUM(data_bets.amount) WHERE data_bets.horse = data_events.challenger 
    /
    SUM(data_bets.amount) WHERE data_bets.horse = data_events.contestant 
AS challenger_odds, 
    SUM(data_bets.amount) WHERE data_bets.horse = data_events.contestant 
    /
    SUM(data_bets.amount) WHERE data_bets.horse = data_events.challenger 
AS contestant_odds 

ответ

1

Использование условной агрегации:

SELECT (SUM(CASE WHEN data_bets.horse = data_events.challenger THEN data_bets.amount ELSE 0 END)/
     SUM(CASE WHEN data_bets.horse = data_events.contestant THEN data_bets.amount END) 
     ) as bet_odds 
+0

Я теперь с помощью нашего условного совокупного заявление, чтобы принести вверх/вниз голосов от таблица data_votes, но у меня проблемы. Помните, если я обновляю этот вопрос с помощью нового запроса? – SISYN

+0

@ DanL. , , Вы должны задать другой вопрос. –

Смежные вопросы