10

私が何かをするなら

SELECT * FROM mytable ORDER BY mycolumn ASC;

特定の順序で結果テーブルを取得します。

PK が与えられた場合、その結果テーブルのどの位置に私の PK のレコードが含まれるかを SQL で効率的に見つける方法はありますか?

4

6 に答える 6

26

ソートしている値の値が、キー値がわかっているレコードよりも低いレコードの数を数えることができます。

select count(*)
from mytable
where mycolumn < (select mycolumn from mytable where key = 42)
于 2009-05-25T17:17:58.153 に答える
21

それをサポートするデータベースでは、この目的で ROW_NUMBER() を使用できます。

SELECT RowNr
FROM (
    SELECT 
         ROW_NUMBER() OVER (ORDER BY mycolumn) AS RowNr,
         mycolumn
    FROM mytable
) sub
WHERE sub.mycolumn = 42

この例では、主キー 42 を探していると想定しています:)

次のような理由で、サブクエリが必要です。

SELECT 
     ROW_NUMBER() OVER (ORDER BY mycolumn) AS RowNr
FROM mytable
WHERE sub.mycolumn = 42

常に 1 を返します。ROW_NUMBER() は、いわば WHERE の後に機能します。

于 2009-05-25T17:14:35.083 に答える
2

SQL はそのようには機能しません。これはセットベースです。つまり、「その結果テーブル内の位置」はデータベースにとって意味がありません。

ResultSet をオブジェクトのコレクションにマップするとき、またはそれを反復処理するときに、位置を追跡できます。

于 2009-05-25T17:16:44.130 に答える
-1

レコードのサブセット全体を選択しない限り、それを判断する方法はありません。PK が整数型の場合、次のことができます。

select count(*) from mytable 
    where id <= 10 -- Record with ID 10
    order by mycolumn asc
于 2009-05-25T17:15:27.767 に答える