我正在尝试运行sql select,但每次尝试时,我都意识到我绝对不适合这样做。
我的设置如下。
我有两张桌子。一个用于游戏玩家,例如存储名字的地方,还有一个用户(用户表不重要)可以投票支持游戏玩家的设置(设置表也不重要)。
因此,在评级表中存储了哪个用户投票支持哪个游戏设置(都有ID),用户给了多少分,以及他对哪个设置进行了评分,因为玩家可以有多个设置。
我已经为你创建了一个SQL Fiddle,HERE。
现在我正在尝试获取所有设置的列表(注意不同的设置),按评级排序(这里很重要,SUM()除以投票支持此设置的用户数量) DESC
我尝试过这样的方法,但当然不起作用。SELECT sum(gsr.gsr_rating),gsr.gsr_setup_id FROM gamer_id加入gamer as g ON g.gamer_id=gsr.gsr_rated_id WHERE gsr_rated_id = (SELECT Gamer_id FROM gamer)
我和我的朋友都输得一塌糊涂,也许你们更有本事。
谢谢你抽出时间,我很感激。
发布于 2017-10-11 01:00:36
在yoru SQLFIDDLE中,你有一个来自subselect的错误,如果你需要更多的匹配行,你可以使用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)否则,如果需要单行用于subselect,则可以使用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
WHERE gsr_rated_id = (SELECT gamer_id FROM gamer order by gamer_id limit 1)但是您不需要subselect,您已经在join on condition中指定了所需的值
SELECT sum(gsr.gsr_rating)
, gsr.gsr_setup_id
FROM gamersetupratings gsr
JOIN gamer as g ON g.gamer_id=gsr.gsr_rated_id 发布于 2017-10-11 01:19:14
这应该会给你不同的游戏is以及每个游戏的平均评分是多少。除非我误解了,否则我认为您应该只查找每个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;发布于 2017-10-11 02:22:34
您将通过下面的查询获得所需的结果。
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如果您愿意,可以将sum(gsr.gsr_rating)/count(gsr.gsr_rated_id)值直接放在order by子句中,但为了更好地理解问题,我只是这样放入
https://stackoverflow.com/questions/46672056
复制相似问题