簡體   English   中英

如何從SQL PHP的同一張表中選擇多個平均值

[英]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 ratingsratings部分; 在查詢結果中包含該字段只是沒有意義(您可以從檢查的行中獲得有效的隨機值)。

而且,按照馬克·貝克的評論所言,您可能會做得更好。 他建議的查詢結果將自動包含新標題的平均評分。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM