2016-01-19 67 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又名錢該事件的總量進行排序。

分揀BY獎

顯然,這查詢不工作,但我想要做這樣的事情:從查詢

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 
     ) 
) 

分揀人氣

顯然,這查詢不工作,要麼,但我想要做的是這樣的:從查詢

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值,因爲我可以計算出,但它確實需要按照bets表中特定event_id的出現次數進行排序。

+0

你使用MySQL或SQL Server? –

回答

1

我認爲數量和金額在這裏你的朋友:

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

應該做的伎倆。 然後,您可以根據需要訂購NumberBets(受歡迎程度)或TotalPrize。如果您想要事件標題,只需要加入JOIN。

1

您可以使用SUMCOUNT聚合函數:

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