![](/img/trans.png)
[英]Query the second highest value of a name, if there's only one value return null
[英]Only return one value for name, SQL Query
我正在尝试查找按此顺序返回内容的 SQL 查询
(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
Output:
姓名 | 关键 | 价值者 |
---|---|---|
最大限度 | 99781 | 1 |
卡尔 | 99780 | 1 |
最大限度 | 99777 | 402 |
卡尔 | 99777 | 395 |
保罗 | 99777 | 370 |
但是如果名字 Max 有 99781 作为 1,而 99777 密钥作为 400。我不想归还他的 99777 密钥,因为他已经有 99781 密钥。 与卡尔(99780 键)相同。
我想要的结果:
姓名 | 关键 | 价值者 |
---|---|---|
最大限度 | 99781 | 1 |
卡尔 | 99780 | 1 |
保罗 | 99777 | 370 |
麦克风 | 99777 | 320 |
约翰 | 99777 | 55 |
Stack Overflow 上的一位用户帮助我解决了这个问题:
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)
OR
(
t1.key IN (99777)
AND NOT EXISTS
(
SELECT 5 FROM player_storage tx
WHERE tx.player_id = t1.player_id
AND tx.key > t1.key
)
)
)
ORDER BY keyy+0 DESC, valuee+0 DESC LIMIT 5
但它只有 1 个名称和 99777 键,即使还有更多要显示。 它不会限制 5,结果如下:
姓名 | 关键 | 价值者 |
---|---|---|
最大限度 | 99781 | 1 |
卡尔 | 99780 | 1 |
保罗 | 99777 | 370 |
您似乎希望每个名称有一行,行key
按降序排列。 那将是:
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
来强制执行此操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.