整数の全範囲を含む列が流れています。列にキーを生成している間INT
、0 と負の値 (DESC の順序) を押し下げ、正のキーを一番上 (ASC/DESC の順序) に置く必要があります。2つのアプローチを思いつきましたが、どちらが最適かわかりません
アプローチ 1:整理整頓されているが、スケーラビリティが不明
WITH t1(c1) AS
(
SELECT 11 UNION ALL
SELECT 2 UNION ALL
SELECT 0 UNION ALL
SELECT -1 UNION ALL
SELECT -11
)
SELECT c1, ROW_NUMBER() OVER (ORDER BY
CASE WHEN c1 <=0 THEN c1 END DESC ,
CASE WHEN c1 >0 THEN c1 END ASC) keys
FROM t1 ;
アプローチ 2:スケーラブル
WITH t1(c1) AS
(
SELECT 11 UNION ALL
SELECT 2 UNION ALL
SELECT 0 UNION ALL
SELECT -1 UNION ALL
SELECT -11
)
SELECT c1, ROW_NUMBER() OVER (ORDER BY c1 ASC) keys
FROM t1
WHERE c1 >0
UNION ALL
-- Need to include Max keys from previous step in actual implementation
SELECT c1,
maxkeys + ROW_NUMBER() OVER (ORDER BY c1 DESC) keys
FROM t1
WHERE c1 <= 0
;
BIGINT
スケーラビリティ(範囲)のための他のより良い代替案を提案してください。