ROW_NUMBER()
का उपयोग करें :
SELECT
name,
ROW_NUMBER() OVER (ORDER BY name) AS id
FROM people;
संपादित करें:
ORDER BY 1
. के बीच अंतर बनाम ORDER BY column_name
SELECT
name,
ROW_NUMBER() OVER (ORDER BY name) AS id
FROM people;
/* Execution Plan */
QUERY PLAN WindowAgg (cost=83.37..104.37 rows=1200 width=38)
-> Sort (cost=83.37..86.37 rows=1200 width=38)
**Sort Key: name**
-> Seq Scan on people (cost=0.00..22.00 rows=1200 width=38)
SELECT
name,
ROW_NUMBER() OVER (ORDER BY 1) AS id
FROM people;
/* Execution Plan */
QUERY PLAN WindowAgg (cost=0.00..37.00 rows=1200 width=38)
-> Seq Scan on people (cost=0.00..22.00 rows=1200 width=38)
दूसरे मामले में कोई सॉर्ट ऑपरेशन नहीं होता है।
आप दूसरी क्वेरी इस प्रकार भी लिख सकते हैं:
SELECT
name,
ROW_NUMBER() OVER () AS id
FROM people;
लोग ORDER BY 1
क्यों लिखते हैं? खिड़की वाले कार्यों में?
क्योंकि कुछ बोलियों में इसकी आवश्यकता होती है और ORDER BY 1
प्लेसहोल्डर की तरह काम करता है।
ओरेकल:
SELECT
name,
ROW_NUMBER() OVER (ORDER BY 1) AS id
FROM people;
टीएसक्यूएल:
SELECT
name,
ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS id
FROM people;