2016-01-19 2 views
0

У меня есть таблица базы данных events и таблица bets. Все ставки, размещенные для определенного события, находятся в таблице bets, тогда как информация о событии хранится в таблице events.Результаты группы mysql по суммарному значению столбца

Скажем, у меня есть эти таблицы:

events table: 
id event_title 
1  Call of Duty Finals 
2  DOTA 2 Semi-Finals 
3  GTA V Air Race 


bets table: 
id event_id amount 
1  1   $10 
1  2   $50 
1  2   $100 
1  3   $25 
1  3   $25 
1  3   $25 

Я хочу, чтобы иметь возможность сортировать popularity аки, сколько ставков были размещены для этого события и prize аки общей суммы денег для этого события.

СОРТИРОВКА ПРЕМИИ

Очевидно, что этот запрос не работает, но я хочу сделать что-то вроде этого:

SELECT * FROM bets GROUP BY event_id SORT BY amount 

amount из запроса выше должна быть накопленная величина всех ставки суммы для этого event_id суммироваться, так что этот запрос будет возвращать

Array (
    [0]=>Array(
      'event_id'=>2 
      'amount'=>$150 
     ) 

    [1]=>Array(
      'event_id'=>3 
      'amount'=>$75 
     ) 
    [2]=>Array(
      'event_id'=>1 
      'amount'=>$10 
     ) 
) 

SORTING постранично

Очевидно, что этот запрос не работает, либо, но я хочу сделать что-то вроде этого:

SELECT * FROM bets GROUP BY event_id SORT BY total_rows 

total_rows из запроса выше должно быть число строк, которые существуют в bets стол суммироваться, так что этот запрос будет возвращать

Array (
    [0]=>Array(
      'event_id'=>3 
      'total_rows'=>3 
     ) 

    [1]=>Array(
      'event_id'=>2 
      'total_rows'=>2 
     ) 
    [2]=>Array(
      'event_id'=>1 
      'total_rows'=>1 
     ) 
) 

Я не обязательно нужно, чтобы вернуть значение total_rows как я мог рассчитывать, но это делает необходимо сортировать по количеству вхождений для этого конкретного event_id в таблицу bets.

+0

вы используете MySQL или SQL Server? –

ответ

1

Я думаю, что граф и сумма ваши друзья здесь:

SELECT COUNT(event_id) AS NumberBets, 
    SUM(amount) AS TotalPrize 
FROM bets 
GROUP BY event_id 

следует сделать трюк. Затем вы можете ЗАКАЗАТЬ либо с помощью NumberBets (популярность), либо TotalPrize по мере необходимости. ПРИСОЕДИНЯЙТЕСЬ только, если вы хотите названия событий.

1

Вы можете использовать SUM и COUNT агрегатные функции:

SELECT 
    e.id AS event_id, SUM(amount) AS sum_amount 
FROM [events] e 
LEFT JOIN bets b 
    ON b.event_id = e.id 
GROUP BY 
    e.id 
ORDER BY 
    sum_amount DESC 

SELECT 
    e.id AS event_id, COUNT(e.event_id) AS no_of_events 
FROM [events] e 
LEFT JOIN bets b 
    ON b.event_id = e.id 
GROUP BY 
    e.id 
ORDER BY 
    no_of_events DESC 
Смежные вопросы