我有一个名为users的表。在这个表中,我有一个名为credits的列(不是唯一的)。 现在我想要第二高的用户累积到用户信用。如果信用字段是唯一的,那么我在下面的查询工作正常
SELECT * FROM users ORDER BY credits DESC LIMIT 1 , 1
但是,如果用户信用不是唯一的,则其创建问题可用于检索我的数据 假设,
mack has 200 credits
jack has 200 credits
rock has 150 credits
当我有这种类型的记录时,在此查询的输出中,我希望摇滚记录不是 jack
任何人都可以帮我找出正确的价值吗?
提前致谢
答案 0 :(得分:1)
希望这会有所帮助(首先获得second highest credits
然后从顶部找到users having those that credit and
选择一个。这将检索一个信用额度第二高的用户):
SELECT * FROM users
WHERE credits = (SELECT distinct credits FROM users
ORDER BY credits DESC LIMIT 1,1)
LIMIT 1;
编辑:如果您还想在具有相同分数的用户中进行选择,请使用适当的过滤/排序条件,例如要在rock
和rock
之间选择jenni
,您可以在名称上有另一个排序基础(假设名称是具有名称的列)
SELECT * FROM users
WHERE credits = (SELECT distinct credits FROM users
ORDER BY credits DESC LIMIT 1,1)
ORDER name desc
LIMIT 1;
要同时获取rock
和jenni
,只需从结尾删除限制并更新内部限制,例如:
SELECT * FROM users
WHERE credits = (SELECT distinct credits FROM users
ORDER BY credits DESC LIMIT 1, 1);
答案 1 :(得分:1)
SELECT a.*
FROM users a
INNER JOIN
(
SELECT DISTINCT credits
FROM users
ORDER BY credits desc
LIMIT 1,1
) b ON a.credits = b.credits
答案 2 :(得分:0)
试试这个
Select * FROM users
Where Credits < (Select Max(Credits) From Users)
ORDER BY credits DESC LIMIT 1;