簡體   English   中英

SQL選擇:匯總用戶對安裝的所有評分。 一個表中有多個setupratings(包括SQL FIDDLE)

[英]SQL select: summ all ratings for setups from users. Multiple setupratings in one table (SQL FIDDLE included)

我正在嘗試運行sql select,但是每次嘗試時,我都知道我絕對不是為此而做的。

我的設置如下。

我有2張桌子。 一個供游戲玩家使用,例如存儲名稱,另一個供用戶(用戶表不重要)投票支持游戲玩家的設置(設置表也不重要)。

因此,在評分表中,存儲了哪個用戶為哪個gamersetup(均帶有ID)投票,該用戶給了多少分以及他對哪個設置進行了投票,因為玩家可以進行多種設置。

我在這里為您創建了一個SQL Fiddle。

現在,我試圖獲取所有設置的列表(注意不同的設置),按等級排序(在此很重要,SUM()除以對該設置投票的用戶數)

我嘗試了類似的方法,但是當然不起作用。 SELECT sum(gsr.gsr_rating),gsr.gsr_setup_id FROM gamersetupratings gsr JOIN gamer as g ON g.gamer_id = gsr.gsr_rated_id WHERE gsr_rated_id =(從游戲玩家中選擇gamer_id)

我和我的朋友失敗了,也許你們有更多的技能。

感謝您的寶貴時間,我非常感謝。

在yoru SQLFIDDLE中,子選擇出現錯誤。如果需要更多內容,則可以使用in子句(或聯接)進行匹配

SELECT sum(gsr.gsr_rating)
 , gsr.gsr_setup_id 
 FROM gamersetupratings gsr 
 JOIN gamer as g ON g.gamer_id=gsr.gsr_rated_id 
 WHERE gsr_rated_id in (SELECT gamer_id FROM gamer)

否則,如果您需要單行用於子選擇,則可以使用限制1

SELECT sum(gsr.gsr_rating)
   , gsr.gsr_setup_id 
   FROM gamersetupratings gsr 
   JOIN gamer as g ON g.gamer_id=gsr.gsr_rated_id 
   WHERE gsr_rated_id = (SELECT gamer_id FROM gamer order by gamer_id limit 1)

但是您不需要子選擇,您無需擁有條件連接所需的值

SELECT sum(gsr.gsr_rating)
 , gsr.gsr_setup_id 
 FROM gamersetupratings gsr 
 JOIN gamer as g ON g.gamer_id=gsr.gsr_rated_id 

這應該為您提供不同的游戲ID,以及每個游戲的平均評分。 除非我誤解了,否則我認為您應該只尋找每個gsr_setup_id的平均值。

SELECT COUNT(gsr_setup_id) as timesVotedFor,
AVG(gsr_rating) as rating,
GSR_SETUP_ID as setupID
FROM gamersetupratings
GROUP BY gsr_setup_id
ORDER BY rating desc;

您將通過以下查詢獲得所需的結果。

SELECT sum(gsr.gsr_rating) as gsr_rating, gsr.gsr_setup_id, 
     sum(gsr.gsr_rating) /count(gsr.gsr_rated_id) as sorting_value
    FROM 
    gamersetupratings gsr 
    JOIN gamer as g 
    ON g.gamer_id=gsr.gsr_rated_id 
    Group by gsr.gsr_setup_id
    Order by sorting_value desc

如果您願意,可以order by子句直接放置sum(gsr.gsr_rating)/count(gsr.gsr_rated_id)值,但是為了更好地理解問題,我只是這樣輸入

暫無
暫無

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

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