从表中检索第二个最高点而没有唯一列

时间:2012-11-16 05:24:34

标签: php mysql sql

我有一个名为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

任何人都可以帮我找出正确的价值吗?

提前致谢

3 个答案:

答案 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;

编辑:如果您还想在具有相同分数的用户中进行选择,请使用适当的过滤/排序条件,例如要在rockrock之间选择jenni,您可以在名称上有另一个排序基础(假设名称是具有名称的列)

     SELECT * FROM users
     WHERE credits = (SELECT distinct credits FROM users 
                   ORDER BY credits DESC LIMIT 1,1)
     ORDER name desc 
     LIMIT 1;

要同时获取rockjenni,只需从结尾删除限制并更新内部限制,例如:

     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;