SELECT * FROM a_table WHERE condition ORDER BY a, b DESC, c
の場合は、ID の a,b,c の値をそれぞれ an, bn, cn とした時、
前からの位置 n
{n| 0 <= n < (SELECT COUNT(*) FROM a_table)}は
SELECT COUNT(*) AS n FROM a_table WHERE
condition AND
(
(a < an) OR
(a = an AND b > bn) OR
(a = an AND b = bn AND c < AS cn )
) — … (A)
の結果となる。
例:
NO: 0 1 2 3 4 5 6 7 8 9 10 11
ID: 0 1 3 5 7 9 10 11 15 20 21 23
a: 1 1 1 1 2 2 2 2 3 3 3 3
b: 4 4 2 0 3 2 1 1 4 3 3 3
c: 0 1 0 2 3 3 2 3 2 3 3 4
テーブルの内容が上記の NO を除いた ID, a, b, c を属性として持ち
検体の ID が 10 の時
a < an を満たす要素は an == 2 なので 4 個 ..(1)
a = an AND b > n を満たす要素は bn == 1 なので 2 個 ..(2)
a = an AND b = bn AND c < AS cn を満たす要素は cn == 2 なので 0 個 ..(3)
全ての計算は排他なので (A) の結果は (1)+(2)+(3) = 6
これは 0 番目から数えた時の 位置 NO に一致する。