”;
Usually if you try to retrieve data from a table, you will get the records in the same order in which you have inserted them.
Using the ORDER BY clause, while retrieving the records of a table you can sort the resultant records in ascending or descending order based on the desired column.
Syntax
Following is the syntax of the ORDER BY clause in PostgreSQL.
SELECT column-list FROM table_name [WHERE condition] [ORDER BY column1, column2, .. columnN] [ASC | DESC];
Example
Assume we have created a table with name CRICKETERS using the following query −
postgres=# CREATE TABLE CRICKETERS ( First_Name VARCHAR(255), Last_Name VARCHAR(255), Age int, Place_Of_Birth VARCHAR(255), Country VARCHAR(255) ); CREATE TABLE postgres=#
And if we have inserted 5 records in to it using INSERT statements as −
postgres=# insert into CRICKETERS values(''Shikhar'', ''Dhawan'', 33, ''Delhi'', ''India''); INSERT 0 1 postgres=# insert into CRICKETERS values(''Jonathan'', ''Trott'', 38, ''CapeTown'', ''SouthAfrica''); INSERT 0 1 postgres=# insert into CRICKETERS values(''Kumara'', ''Sangakkara'', 41, ''Matale'', ''Srilanka''); INSERT 0 1 postgres=# insert into CRICKETERS values(''Virat'', ''Kohli'', 30, ''Delhi'', ''India''); INSERT 0 1 postgres=# insert into CRICKETERS values(''Rohit'', ''Sharma'', 32, ''Nagpur'', ''India''); INSERT 0 1
Following SELECT statement retrieves the rows of the CRICKETERS table in the ascending order of their age −
postgres=# SELECT * FROM CRICKETERS ORDER BY AGE; first_name | last_name | age | place_of_birth | country ------------+------------+-----+----------------+------------- Virat | Kohli | 30 | Delhi | India Rohit | Sharma | 32 | Nagpur | India Shikhar | Dhawan | 33 | Delhi | India Jonathan | Trott | 38 | CapeTown | SouthAfrica Kumara | Sangakkara | 41 | Matale | Srilanka (5 rows)es:
You can use more than one column to sort the records of a table. Following SELECT statements sort the records of the CRICKETERS table based on the columns age and FIRST_NAME.
postgres=# SELECT * FROM CRICKETERS ORDER BY AGE, FIRST_NAME; first_name | last_name | age | place_of_birth | country ------------+------------+-----+----------------+------------- Virat | Kohli | 30 | Delhi | India Rohit | Sharma | 32 | Nagpur | India Shikhar | Dhawan | 33 | Delhi | India Jonathan | Trott | 38 | CapeTown | SouthAfrica Kumara | Sangakkara | 41 | Matale | Srilanka (5 rows)
By default, the ORDER BY clause sorts the records of a table in ascending order. You can arrange the results in descending order using DESC as −
postgres=# SELECT * FROM CRICKETERS ORDER BY AGE DESC; first_name | last_name | age | place_of_birth | country ------------+------------+-----+----------------+------------- Kumara | Sangakkara | 41 | Matale | Srilanka Jonathan | Trott | 38 | CapeTown | SouthAfrica Shikhar | Dhawan | 33 | Delhi | India Rohit | Sharma | 32 | Nagpur | India Virat | Kohli | 30 | Delhi | India (5 rows)
ORDER BY Clause Using Python
To retrieve contents of a table in specific order, invoke the execute() method on the cursor object and, pass the SELECT statement along with ORDER BY clause, as a parameter to it.
Example
In the following example, we are creating a table with name and Employee, populating it, and retrieving its records back in the (ascending) order of their age, using the ORDER BY clause.
import psycopg2 #establishing the connection conn = psycopg2.connect( database="mydb", user=''postgres'', password=''password'', host=''127.0.0.1'', port= ''5432'' ) #Setting auto commit false conn.autocommit = True #Creating a cursor object using the cursor() method cursor = conn.cursor() #Doping EMPLOYEE table if already exists. cursor.execute("DROP TABLE IF EXISTS EMPLOYEE") #Creating a table sql = ''''''CREATE TABLE EMPLOYEE( FIRST_NAME CHAR(20) NOT NULL, LAST_NAME CHAR(20), AGE INT, SEX CHAR(1), INCOME INT, CONTACT INT)'''''' cursor.execute(sql) #Populating the table insert_stmt = "INSERT INTO EMPLOYEE (FIRST_NAME, LAST_NAME, AGE, SEX, INCOME, CONTACT) VALUES (%s, %s, %s, %s, %s, %s)" data = [(''Krishna'', ''Sharma'', 26, ''M'', 2000, 101), (''Raj'', ''Kandukuri'', 20, ''M'', 7000, 102), (''Ramya'', ''Ramapriya'', 29, ''F'', 5000, 103), (''Mac'', ''Mohan'', 26, ''M'', 2000, 104)] cursor.executemany(insert_stmt, data) conn.commit() #Retrieving specific records using the ORDER BY clause cursor.execute("SELECT * from EMPLOYEE ORDER BY AGE") print(cursor.fetchall()) #Commit your changes in the database conn.commit() #Closing the connection conn.close()
Output
[(''Sharukh'', ''Sheik'', 25, ''M'', 8300.0), (''Sarmista'', ''Sharma'', 26, ''F'', 10000.0)]
”;