2010-10-18 38 views

उत्तर

71

Postgresql> 8,4

SELECT 
    row_number() OVER (ORDER BY col1) AS i, 
    e.col1, 
    e.col2, 
    ... 
FROM ... 
+12

सावधान रहें रहे हैं। यह ओरेकल के रोउनम के समान है, लेकिन यह थोड़ा अलग है। ओरेकल का राउनम डिस्क से पंक्ति पढ़ने के समय असाइन किया गया है, जबकि यह row_number() आपके – Royce

+0

में क्या है, इस पर निर्भर करता है कि गति अंतर के बारे में क्या? – Nashev

2

पोस्टग्रेस्क्ल में ओरेकल के ROWNUM के बराबर नहीं है। कई मामलों में आप अपनी क्वेरी में LIMIT और OFFSET का उपयोग करके एक ही परिणाम प्राप्त कर सकते हैं।

+0

-1 गलत हो रहा है यही कारण है, स्वीकार किए जाते हैं जवाब ... –

+3

+1 ROWNUM और ROW_NUMBER() से अधिक() नहीं बिल्कुल एक ही –

9

आप सिर्फ एक संख्या वापस आने के लिए यह कोशिश करना चाहते हैं।

create temp sequence temp_seq; 
SELECT inline_v1.ROWNUM,inline_v1.c1 
FROM 
(
select nextval('temp_seq') as ROWNUM, c1 
from sometable 
)inline_v1; 

आप तो अपने ROWNUM अपने डेटा के लिए कुछ अनुक्रमिक अर्थ नहीं है inline_v1 एसक्यूएल करने के लिए द्वारा एक आदेश जोड़ सकते हैं।

select nextval('temp_seq') as ROWNUM, c1 
from sometable 
ORDER BY c1 desc; 

सबसे तेज़ नहीं हो सकता है, लेकिन यदि आपको वास्तव में उनकी आवश्यकता है तो यह एक विकल्प है।

18

मैं सिर्फ Postgres 9.1 एक समाधान है जो ओरेकल ROWNUM के करीब है में परीक्षण किया है:

select row_number() over() as id, t.* 
from information_schema.tables t; 
+0

मैंने इसे 8.4 में परीक्षण किया और यह भी वहां काम करता है। – Mac

+3

ध्यान दें कि यह बाहरी क्वेरी में 'ORDER BY' का सम्मान नहीं करेगा। –

7

Postgresql सीमा है।

Oracle की कोड:

select * 
from 
    tbl 
where rownum <= 1000; 

Postgresql के कोड में एक ही:

select * 
from 
    tbl 
limit 1000 
0

ऑफसेट के साथ, सीमा clausule का उपयोग पंक्ति संख्या -1, इसलिए यदि चयन करने के लिए यू चाहते संख्या 8 पंक्ति मिल इसलिए का उपयोग करें:

सीमा 1 ऑफसेट 7

0

आप एक अद्वितीय कुंजी है, तो आप उपयोग कर सकते हैं COUNT(*) OVER (ORDER BY unique_key) as ROWNUM

SELECT t.*, count(*) OVER (ORDER BY k) ROWNUM 
FROM yourtable t; 

| k |  n | rownum | 
|---|-------|--------| 
| a | TEST1 |  1 | 
| b | TEST2 |  2 | 
| c | TEST2 |  3 | 
| d | TEST4 |  4 | 

DEMO