SQL Exercise: Using precedence with specified condition
Write a SQL query that displays order number, purchase amount, and the achieved and unachieved percentage (%) for those orders that exceed 50% of the target value of 6000.
Sample table: orders
ord_no purch_amt ord_date customer_id salesman_id ---------- ---------- ---------- ----------- ----------- 70001 150.5 2012-10-05 3005 5002 70009 270.65 2012-09-10 3001 5005 70002 65.26 2012-10-05 3002 5001 70004 110.5 2012-08-17 3009 5003 70007 948.5 2012-09-10 3005 5002 70005 2400.6 2012-07-27 3007 5001 70008 5760 2012-09-10 3002 5001 70010 1983.43 2012-10-10 3004 5006 70003 2480.4 2012-10-10 3009 5003 70012 250.45 2012-06-27 3008 5002 70011 75.29 2012-08-17 3003 5007 70013 3045.6 2012-04-25 3002 5001
Sample Solution :
-- This query selects specific columns 'ord_no', 'purch_amt', and calculates two additional columns.
-- It calculates the percentage of the achieved and unachieved amounts based on a target of 6000.
SELECT ord_no, purch_amt,
-- Calculates the percentage of the achieved amount.
(100 * purch_amt) / 6000 AS "Achieved %",
-- Calculates the percentage of the unachieved amount.
(100 * (6000 - purch_amt) / 6000) AS "Unachieved %"
-- Specifies the table from which to retrieve the data (in this case, 'orders').
FROM orders
-- Filters the rows to only include those where the percentage of the achieved amount is greater than 50%.
WHERE (100 * purch_amt) / 6000 > 50;
Output of the Query:
ord_no purch_amt Achieved % Unachieved % 70008 5760.00 96.0000000000000000 4.0000000000000000 70013 3045.60 50.7600000000000000 49.2400000000000000
Code Explanation:
The SQL query that is selecting specific columns "ord_no, purch_amt, (100*purch_amt)/6000 AS "Achieved %", (100(6000-purch_amt)/6000) AS "Unachieved %" from the 'orders' table where (100*purch_amt)/6000 is greater than 50.
Using mathematical expressions, the query calculates the percentage of achieved and unachieved amounts based on the value of the "purch_amt" column and a fixed value of 6000 as the value of the "purch_amt" column.
This query will return all rows in the table 'orders' that have a achieved percentage of greater than 50 as well as the selected columns in each row.
Explanation :
Visual presentation:
Practice Online
Query Visualization:
Duration:
Rows:
Cost:
Have another way to solve this solution? Contribute your code (and comments) through Disqus.
Previous SQL Exercise: Using NOT, OR & AND operators.
Next SQL Exercise: Find those employees whose last name is Dosni or Mardy.
What is the difficulty level of this exercise?
Test your Programming skills with w3resource's quiz.
- Weekly Trends and Language Statistics
- Weekly Trends and Language Statistics