2017-06-19 13 views
0

私はテーブルを1つ使用してタイトルの平均評価を選択しようとしています。それが唯一のユーザーから選ば返す必要が私のデータベースは、これが戻っているgame_ratingssql phpの同じテーブルから複数のavgを選択する方法

$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 ; 
    } 

と呼ばれる

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 

を選択thatsのすべてのtommys評価の合計はエコーならば$ rate_hardlifeエコーなら$ av_gigearをエコーし​​たいと思う。私はtommyの平均を与えることを望む

+1

単に 'title、AVG(rating)AS rating from game_ratingsどこのユーザー名= 'tommy' GROUP BY title'を使ってみませんか? –

+0

このようにして個々のタイトルレーティングを出力するにはどうすればいいですか?私は混乱していました –

答えて

2

正しい構文はAVG()の引数としてCASE

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

しかし、これは二列の値を返します。もちろん

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'; 

、書くために簡単と思われます。 AVGが他の集計関数のようなヌルを無視し、あなたがこのような何か行うことができるはずと仮定すると、

+0

簡単な方法でタイトルに基づいて個々のレートを得るにはどうすればよいですか? –

2

:私はSELECT ratingsratings一部を省略

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' 
; 

注意を。そのフィールドをクエリの結果に含めることは意味がありません(行の検査結果から実際にランダムな値が得られます)。

また、Mark Ba​​ker氏のコメントで示唆しているように、彼が提案したクエリの結果に自動的に新しいタイトルの平均レーティングが自動的に含まれます。

関連する問題