Mysql 仅为名称、SQL查询返回一个值

Mysql 仅为名称、SQL查询返回一个值,mysql,sql,Mysql,Sql,我正试图找到一个SQL查询,它按以下顺序返回内容 拥有99781密钥的人员的姓名如果值为正,则最大值为1 拥有99780密钥的人员的姓名如果值为正数,则最多可为2 谁的姓名有99777键,按值的顺序从选择到剩余的限制为5 99781和99780键上的这些限制已经由系统提供,不必在显示时进行限制 我使用的是: SELECT t2.name as name, t1.key as keyy, t1.value as valuee FROM player_storage t1 INNER JOIN p

我正试图找到一个SQL查询,它按以下顺序返回内容

拥有99781密钥的人员的姓名如果值为正,则最大值为1 拥有99780密钥的人员的姓名如果值为正数,则最多可为2 谁的姓名有99777键,按值的顺序从选择到剩余的限制为5 99781和99780键上的这些限制已经由系统提供,不必在显示时进行限制

我使用的是:

SELECT t2.name as name, t1.key as keyy, t1.value as valuee 
FROM player_storage t1 INNER JOIN players t2 on t2.id = t1.player_id 
WHERE t1.value > 0 AND t1.key IN (99781,99780,99777) 
ORDER BY keyy+0 DESC, valuee+0 DESC LIMIT 5
    
输出:

名称 凯伊 瓦利 马克斯 99781 1. 卡尔 99780 1. 马克斯 99777 402 卡尔 99777 395 保罗 99777 370
您似乎希望每个名称有一行,行按键降序排列。这将是:

select ps.*
from (select p.name as name, ps.key as key, p.value as value
             row_number() over (partition by name order by key desc) as seqnum
      from player_storage ps join
           players p
           on p.id = ps.player_id 
      where ps.key in (99781, 99780, 99777)
     ) ps
where seqnum = 1;

你们所有的值都是正数,所以我不明白为什么有一个关于正数的条件。当然,您可以将and value>0添加到子查询以强制执行此操作。

很抱歉,这会给我带来语法错误。我在您的查询中也看不到表名。@Yurianeceto。我根据你问题中的代码调整了答案。我正试图在phpmyadmin数据库上运行它以进行测试,结果是:1064-您的SQL在第行的“key,p.value as value row\u number over partition by name orde…”旁边有一个语法错误2@YuriAniceto . . . 调整列名。键是SQL关键字,不适合用作列名。我只是保留了示例代码中的名称。很抱歉,列名必须是键,因为它是系统使用的。帖子上的代码正在运行,但我不能让你的代码运行,我不擅长sql。