[英]How to select multiple avg from the same table in sql php
我正在嘗試使用1個表選擇標題的平均等級,我嘗試了CASE WHEN無法正常工作的情況,當我使用CASE WHEN返回所有平均值時,但我需要它僅從所選擇的用戶中返回所選擇的
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 ;
}
如果我回聲$ rate_hardlife,這將返回所有tommys評級的平均值,而不僅僅是大熊,我希望它給我該平均值,如果我回聲$ rate_bigbear,我希望它給我該平均值,從而得到tommy
正確的語法會將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;
但這將返回兩行的值。
假設AVG
像其他聚合函數一樣忽略null,則應該能夠執行以下操作:
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 ratings
的ratings
部分; 在查詢結果中包含該字段只是沒有意義(您可以從檢查的行中獲得有效的隨機值)。
而且,按照馬克·貝克的評論所言,您可能會做得更好。 他建議的查詢結果將自動包含新標題的平均評分。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.