Showing posts with label postgres. Show all posts
Showing posts with label postgres. Show all posts

Monday, May 10, 2010

Need to find second highest salary from table

Ok..i know there are various methods to do this...but was looking for optimized query to find the second highest salary from say..employee table that has id, Name and Salary as fields! Can i do it in one query?? Help!!!

Thursday, April 15, 2010

Selecting from a sub-query

postgres=#
postgres=# CREATE TABLE employee (
postgres(# ID int,
postgres(# name varchar(10),
postgres(# salary real,
postgres(# start_date date,
postgres(# city varchar(10),
postgres(# region char(1)
postgres(# );
CREATE TABLE
postgres=#
postgres=# insert into employee (ID, name, salary, start_date, city, region)
postgres-# values (1, 'Jason', 40420, '02/01/94', 'New York', 'W');
INSERT 0 1
postgres=# insert into employee (ID, name, salary, start_date, city, region)
postgres-# values (2, 'Robert',14420, '01/02/95', 'Vancouver','N');
INSERT 0 1
postgres=# insert into employee (ID, name, salary, start_date, city, region)
postgres-# values (3, 'Celia', 24020, '12/03/96', 'Toronto', 'W');
INSERT 0 1
postgres=# insert into employee (ID, name, salary, start_date, city, region)
postgres-# values (4, 'Linda', 40620, '11/04/97', 'New York', 'N');
INSERT 0 1
postgres=# insert into employee (ID, name, salary, start_date, city, region)
postgres-# values (5, 'David', 80026, '10/05/98', 'Vancouver','W');
INSERT 0 1
postgres=# insert into employee (ID, name, salary, start_date, city, region)
postgres-# values (6, 'James', 70060, '09/06/99', 'Toronto', 'N');
INSERT 0 1
postgres=# insert into employee (ID, name, salary, start_date, city, region)
postgres-# values (7, 'Alison',90620, '08/07/00', 'New York', 'W');
INSERT 0 1
postgres=# insert into employee (ID, name, salary, start_date, city, region)
postgres-# values (8, 'Chris', 26020, '07/08/01', 'Vancouver','N');
INSERT 0 1
postgres=# insert into employee (ID, name, salary, start_date, city, region)
postgres-# values (9, 'Mary', 60020, '06/09/02', 'Toronto', 'W');
INSERT 0 1
postgres=#
postgres=# select * from employee;
id | name | salary | start_date | city | region
----+--------+--------+------------+-----------+--------
1 | Jason | 40420 | 1994-02-01 | New York | W
2 | Robert | 14420 | 1995-01-02 | Vancouver | N
3 | Celia | 24020 | 1996-12-03 | Toronto | W
4 | Linda | 40620 | 1997-11-04 | New York | N
5 | David | 80026 | 1998-10-05 | Vancouver | W
6 | James | 70060 | 1999-09-06 | Toronto | N
7 | Alison | 90620 | 2000-08-07 | New York | W
8 | Chris | 26020 | 2001-07-08 | Vancouver | N
9 | Mary | 60020 | 2002-06-09 | Toronto | W
(9 rows)

postgres=#
postgres=# -- Selecting from a sub-query
postgres=#
postgres=# SELECT 'test' AS test, id
postgres-# FROM (SELECT id FROM employee)
postgres-# AS example_sub_query;
test | id
------+----
test | 1
test | 2
test | 3
test | 4
test | 5
test | 6
test | 7
test | 8
test | 9
(9 rows)

postgres=#
postgres=# drop table employee;
DROP TABLE
postgres=#
postgres=#
postgres=#

A simple sub-query - subquery return one value

A simple sub-query: subquery return one value

postgres=#
postgres=# create table job(
postgres(# ID int,
postgres(# title varchar (10));
CREATE TABLE
postgres=#
postgres=#
postgres=# insert into job(ID, title) values(1,'Developer');
INSERT 0 1
postgres=# insert into job(ID, title) values(2,'Tester');
INSERT 0 1
postgres=# insert into job(ID, title) values(3,'Designer');
INSERT 0 1
postgres=# insert into job(ID, title) values(4,'Programmer');
INSERT 0 1
postgres=#
postgres=# select * from job;
id | title
----+------------
1 | Developer
2 | Tester
3 | Designer
4 | Programmer
(4 rows)

postgres=#
postgres=# CREATE TABLE employee (
postgres(# ID int,
postgres(# name varchar(10),
postgres(# salary real,
postgres(# start_date date,
postgres(# city varchar(10),
postgres(# region char(1)
postgres(# );
CREATE TABLE
postgres=#
postgres=# insert into employee (ID, name, salary, start_date, city, region)
postgres-# values (1, 'Jason', 40420, '02/01/94', 'New York', 'W');
INSERT 0 1
postgres=# insert into employee (ID, name, salary, start_date, city, region)
postgres-# values (2, 'Robert',14420, '01/02/95', 'Vancouver','N');
INSERT 0 1
postgres=# insert into employee (ID, name, salary, start_date, city, region)
postgres-# values (3, 'Celia', 24020, '12/03/96', 'Toronto', 'W');
INSERT 0 1
postgres=# insert into employee (ID, name, salary, start_date, city, region)
postgres-# values (4, 'Linda', 40620, '11/04/97', 'New York', 'N');
INSERT 0 1
postgres=# insert into employee (ID, name, salary, start_date, city, region)
postgres-# values (5, 'David', 80026, '10/05/98', 'Vancouver','W');
INSERT 0 1
postgres=# insert into employee (ID, name, salary, start_date, city, region)
postgres-# values (6, 'James', 70060, '09/06/99', 'Toronto', 'N');
INSERT 0 1
postgres=# insert into employee (ID, name, salary, start_date, city, region)
postgres-# values (7, 'Alison',90620, '08/07/00', 'New York', 'W');
INSERT 0 1
postgres=# insert into employee (ID, name, salary, start_date, city, region)
postgres-# values (8, 'Chris', 26020, '07/08/01', 'Vancouver','N');
INSERT 0 1
postgres=# insert into employee (ID, name, salary, start_date, city, region)
postgres-# values (9, 'Mary', 60020, '06/09/02', 'Toronto', 'W');
INSERT 0 1
postgres=#
postgres=# select * from employee;
id | name | salary | start_date | city | region
----+--------+--------+------------+-----------+--------
1 | Jason | 40420 | 1994-02-01 | New York | W
2 | Robert | 14420 | 1995-01-02 | Vancouver | N
3 | Celia | 24020 | 1996-12-03 | Toronto | W
4 | Linda | 40620 | 1997-11-04 | New York | N
5 | David | 80026 | 1998-10-05 | Vancouver | W
6 | James | 70060 | 1999-09-06 | Toronto | N
7 | Alison | 90620 | 2000-08-07 | New York | W
8 | Chris | 26020 | 2001-07-08 | Vancouver | N
9 | Mary | 60020 | 2002-06-09 | Toronto | W
(9 rows)

postgres=#
postgres=#
postgres=# -- A simple sub-query
postgres=#
postgres=# SELECT name FROM employee WHERE id = (SELECT id FROM job where title = 'Developer');
name
-------
Jason
(1 row)

postgres=#
postgres=#
postgres=# drop table employee;
DROP TABLE
postgres=# drop table job;
DROP TABLE
postgres=#
postgres=#