我正在尝试为一个猜谜游戏创建一个数据库,在这个游戏中,玩家应该猜测给定产品的价值。我有三张table;
一个包含以下列的产品表:
产品ID
产品名称(varchar)
为玩家提供一个表,包含以下列
玩家ID
玩家名称(varchar)
一个存储玩家、产品及其猜测的表,即
猜ID
玩家ID
产品ID
猜测(int)
我正在尝试找到一种方法来组合哪个玩家(playername)对每个产品(productname)的猜测(guess)最高,即总结每个产品、每个产品的猜测最高以及做出猜测的玩家的姓名。
到目前为止,我只能为每个产品获得正确的产品名和正确的猜测值。不知何故,这对playername不起作用,我每次都会弄错名字。
SELECT pl.PlayerName, MAX(g.Guess), p.ProductName
FROM
guess g
INNER JOIN player pl on g.PlayerID = pl.PlayerID
INNER JOIN product p on g.ProductID = p.ProductID
GROUP BY g.ProductID;
我想我的问题是与特定产品相关的每一行都有两个动态值;guess和playerid,每当我尝试按max(guess)排序时,它都会给我带来问题。我无法理解为上述查询选择的playerid。这对我来说毫无意义。
如果你们能给我指出正确的方向,我将不胜感激。
干杯。
3条答案
按热度按时间n8ghc7c11#
您可以在此查询中使用最后一个值。您还可以通过对desc进行排序来使用第一个值(您不必给出无界的preceding和following。而且,这是基于猜测在产品名称中是唯一的假设,所以排序将是一致的。
样本数据和输出将有助于了解它是否是预期的,但我认为它将在这里工作的基础上,你提到的。
cs7cruho2#
使用相关子查询为每个产品选择最高猜测,然后在外部查询中选择相关的播放器和产品记录,如:
f45qwnt83#
一种方法是在mysql中使用某种黑客手段:
这种方法肯定有局限性。的内部字符串表示形式
GROUP_CONCAT()
限制为1000个字符(尽管可以扩展)。上面假设名称不包含逗号(尽管可以使用其他分隔符)。更好的解决方案是使用窗口函数,但这些函数仅在mysql 8+中可用。