Generating Derived Fields

April 5, 2018

Generating Derived Fields

In data science and machine learning, it is common to generate new fields using existing ones. SQL enables us to do this easily using the CASE function. If you are familiar with programming languages such as Python, C# or Java, it performs a similar function to the if...else statements.

We will demonstrate this feature using the classicmodels database, which you can download from mysqltutorial.


Order Details

The orderdetails table stores the product code, quantity of each item ordered and the price of each item.

orderNumber productCode quantityOrdered priceEach
10100 S18_1749 30 136
10100 S18_2248 50 55.09
10100 S18_4409 22 75.46
10100 S24_3969 49 35.29
10101 S18_2325 25 108.06
10101 S18_2795 26 167.06
10101 S24_1937 45 32.53
10101 S24_2022 46 44.35

We want to calculate the total amount of each order and if the total is more than $10,000, we will offer a discount of $500 and display the discounted total cost in a new column.

In psuedocode, the algorithm should perform the following steps.


Calculate the total amount of each order.
    
If total amount is larger than $10,000, 
    
    Subtract $500 from the total

Else

    Do nothing

We encode this logic into the CASE... WHEN ... END block in the following query.


SELECT
   orderNumber,
   SUM(quantityOrdered * priceEach) AS 'orderTotal',
   CASE
      WHEN
         SUM(quantityOrdered * priceEach) > 10000 
      THEN
         SUM(quantityOrdered * priceEach) - 500 
      ELSE
         SUM(quantityOrdered * priceEach) 
   END
   AS 'discountedAmount' 
FROM
   orderdetails 
WHERE
   orderNumber IN 
   (
      10110, 10111, 10112
   )
GROUP BY
   orderNumber 
ORDER BY
   orderTotal ASC;
orderNumber orderTotal discountedAmount
10112 7674.94 7674.94
10111 16537.85 16037.85
10110 48425.69 47925.69
comments powered by Disqus