mysql - 名称只返回一个值,SQL Query
问题描述
我正在尝试查找按此顺序返回内容的 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 |
但是如果名字 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
到子查询以强制执行此操作。
推荐阅读
- database - 实体框架 6.4.4 迁移问题(“参数@objname 不明确或声明的@objtype (COLUMN) 错误。”)
- visual-studio-code - vs 代码扩展中对等方的用户信息(用户名、电子邮件。id)为空
- mongodb - 如何将 mongodb 的 Hash Id 替换为简单的 Int?
- django - 在 django 中登录没有 login() 功能的用户
- python - 如何使用python从响应中获取特定值
- javascript - 如何将下拉列表的值设置为我在 java 脚本中拥有的函数
- loops - 用句子中的元素循环一个字典
- amcharts - Amchart v4 数据未排序?(线路有奇怪的行为)
- jquery - 如何解决这个无休止滚动的代码?
- python - 为什么我不能将 True 存储在 Set 中?