SQL Challenges-1: Nth Highest Sale amount
Nth Highest Sale amount
From the following table, write a SQL query to find the Nth highest sale. Return sale amount.
Input:
Table: salesemast
Structure:
| Field | Type | Null | Key | Default | Extra |
|---|---|---|---|---|---|
| sale_id | int(11) | YES | |||
| employee_id | int(11) | YES | |||
| sale_date | date | YES | |||
| sale_amt | int(11) | YES |
Data:
| sale_id | employee_id | sale_date | sale_amt |
|---|---|---|---|
| 1 | 1000 | 2012-03-08 | 4500 |
| 2 | 1001 | 2012-03-09 | 5500 |
| 3 | 1003 | 2012-04-10 | 3500 |
Sample Solution:
SQL Code(MySQL):
CREATE TABLE IF NOT EXISTS salemast(sale_id int, employee_id int, sale_date date, sale_amt int);
TRUNCATE TABLE salemast;
INSERT INTO salemast (sale_id, employee_id, sale_date, sale_amt) VALUES ('1', '1000', '2012-03-08', 4500);
INSERT INTO salemast (sale_id, employee_id, sale_date, sale_amt) VALUES ('2', '1001', '2012-03-09', 5500);
INSERT INTO salemast (sale_id, employee_id, sale_date, sale_amt) VALUES ('3', '1003', '2012-04-10', 3500);
SELECT * FROM salemast;
Sample Output:
getNthHighestSaleAmt(3)|
-----------------------|
3500|
Solution-1:
# Solution
USE ‘temp';
DROP function IF EXISTS 'getNthHighestSaleAmt';
DELIMITER $$
USE 'temp'$$
# -------------------------------
CREATE FUNCTION 'getNthHighestSaleAmt' (N INT) RETURNS int(11)
BEGIN
SET N = N-1;
RETURN (
SELECT DISTINCT sale_amt FROM salemast
ORDER BY sale_amt DESC
LIMIT 1 OFFSET N
);
END$$
DELIMITER ;
# To Execute the function:
SELECT getNthHighestSaleAmt(3);
Go to:
PREV : Third Highest Sale.
NEXT : Consecutive Numbers.
SQL Code Editor:
Contribute your code and comments through Disqus.
