【问题标题】:SQL: the most effective way to get row number of one elementSQL:获取一个元素的行号的最有效方法
【发布时间】:2015-10-12 17:50:09
【问题描述】:

我有一张人桌:

id   | Name |  Age
1    | Alex |  18
2    | Peter|  30
3    | Zack |  25
4    | Bim  |  30
5    | Ken  |  20

我有以下行间隔:WHERE ID>1 AND ID<5。我知道在这个区间有一个id=3的人。在此间隔内获取其行号的最有效(最快)方法是什么(在我的示例中 rownumber=2)?我的意思是我不需要任何其他数据。我只需要一件事 - 知道间隔WHERE ID>1 AND ID<5 中 id=3 的人的行位置。

如果可能的话,我想获得的不是供应商特定的解决方案,而是通用的 sql 解决方案。如果不可能,那么我需要 postgresql 和 h2 的解决方案。

【问题讨论】:

    标签: sql database postgresql h2


    【解决方案1】:

    行号是间隔中第一行与您要查找的行之间的行数。对于区间ID>1 AND ID<5 和目标行ID=3,这是:

    select  count(*)
    from    YourTable
    where   id between 2 and 3
    

    对于区间 ID>314 AND ID<1592 和目标行 ID=1000,您可以使用:

    where   id between 315 and 1000
    

    要确保存在带有ID=3 的元素,请使用:

    select  count(*)
    from    YourTable
    where   id between 2 and
            (
            select  id
            from    YourTable 
            where   id = 3
            )
    

    如果该行不存在,这将返回 0

    【讨论】:

    • 非常感谢。很好的解决方案。但是如果我错了,并且在这个区间内没有 id=3 的元素,我将如何找到它?
    猜你喜欢
    • 1970-01-01
    • 2014-03-03
    • 2013-11-25
    • 1970-01-01
    • 2010-10-16
    • 1970-01-01
    • 2016-07-07
    • 2013-06-14
    • 2023-03-24
    相关资源
    最近更新 更多