2017-06-19 115 views
0

我試圖選擇標題的平均評分使用1表我試過的情況下,當它不工作時,當我使用CASE當它返回所有的平均值,但我需要它只是從用戶這就是選擇返回選擇如何從同一個表中選擇多個平均值php

ID USERNAME TITLE RATING RATED_BY

1     tommy   Bigbear   5  oscar 

2     tommy   Bigbear   2  dillan 

3     tommy   HardLife   3  jeff 

4     benben   Bigbear   9  mike 

我的數據庫稱爲game_ratings

$rates_select = mysqli_query($conn,"SELECT rating AS rates, 
     CASE WHEN title ='Bigbear' THEN AVG(rating) ELSE NULL END AS bigbear, 
     CASE WHEN title ='HardLife' THEN AVG(rating) ELSE NULL END AS hardlife 
     FROM game_ratings WHERE username='tommy'") ; 

    if($rate_select > 0){ 

     $rate = mysqli_fetch_array($rate_select) ; 
     $rate_bigbear = $rate['bigbear'] ; 
     $rate_hardlife = $rate['hardlife'] ; 

    echo $rate_bigbear ; 
    } 

這是回訪所有tommys收視率的平均總數不只是大熊 如果我echo $ rate_hardlife我希望它給我的平均值,如果我回聲$ rate_bigbear我想它給我平均湯米

+1

爲什麼不簡單地使用'SELECT title,AVG(rating)AS rating from game_ratings WHERE username ='tommy'GROUP BY title'? –

+0

如何以這種方式輸出個人標題等級,我很困惑 –

回答

2

正確的語法會有CASE作爲參數傳遞給AVG()

SELECT AVG(CASE WHEN title = 'Bigbear' THEN rating END) AS bigbear, 
     AVG(CASE WHEN title = 'HardLife' THEN rating END) AS hardlife 
FROM game_ratings 
WHERE username = 'tommy'; 

當然,它似乎更簡單的寫:

SELECT title, AVG(rating) as rating 
FROM game_ratings 
WHERE username = 'tommy' AND 
     title IN ('Bigbear', 'HardLife') 
GROUP BY title; 

但這返回兩行的值。

+0

如何使用標記建議的簡單方式獲得基於標題的個人費率? –

2

假設AVG忽略空值與其它集合函數,你應該能夠做這樣的事情:

SELECT AVG(CASE WHEN title = 'Bigbear' THEN rating ELSE NULL END) AS bigbear 
, AVG(CASE WHEN title = 'HardLife' THEN rating ELSE NULL END) AS hardlife 
FROM game_ratings 
WHERE username = 'tommy' 
; 

注意,我省略SELECT ratingsratings部分;在查詢結果中包含該字段沒有任何意義(您可以從檢查的行中獲得有效的隨機值)。

另外,您可能比Mark Ba​​ker的評論暗示的要好得多;他建議的查詢結果會自動包含新標題的平均評分。