0

整数の全範囲を含む列が流れています。列にキーを生成している間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スケーラビリティ(範囲)のための他のより良い代替案を提案してください。

4

1 に答える 1