AdventureWorks Database: Find the differences in sales quota for the next quarters
SQL Query - AdventureWorks: Exercise-111 with Solution
111. From the following table, write a query in SQL to return the sales year, sales quarter, current sales quota, the next quarter's sales quota, and the difference between the current and next quarter's sales quotas for a specific salesperson. Filter the results for the salesperson with BusinessEntityID 277 for the years 2012 and 2013.
Sample table: Sales.SalesPersonQuotaHistorybusinessentityid|quotadate |salesquota|rowguid |modifieddate | ----------------+-----------------------+----------+------------------------------------+-----------------------+ 274|2011-05-31 00:00:00.000| 28000|99109bbf-8693-4587-bc23-6036ec89e1be|2011-04-16 00:00:00.000| 274|2011-08-31 00:00:00.000| 7000|dfd01444-8900-461c-8d6f-04598dae01d4|2011-07-17 00:00:00.000| 274|2011-12-01 00:00:00.000| 91000|0a69f453-9689-4ccf-a08c-c644670f5668|2011-10-17 00:00:00.000| 274|2012-02-29 00:00:00.000| 140000|da8d1458-5fb9-4c3e-9ead-8f5ce1393047|2012-01-15 00:00:00.000| 274|2012-05-30 00:00:00.000| 70000|760cef84-b980-417b-a667-7358c38857f0|2012-04-15 00:00:00.000| 274|2012-08-30 00:00:00.000| 154000|fb29e024-f26a-49aa-a7cc-c99ae7ba4853|2012-07-16 00:00:00.000| 274|2012-11-30 00:00:00.000| 107000|13947d2c-a254-47c9-8817-cbd186ffa526|2012-10-16 00:00:00.000| 274|2013-02-28 00:00:00.000| 58000|bc1a222f-47a0-48d1-9c56-ac873269dc98|2013-01-14 00:00:00.000| 274|2013-05-30 00:00:00.000| 263000|8b4e3cbf-f0ef-49c5-9a8c-87679055057e|2013-04-15 00:00:00.000| 274|2013-08-30 00:00:00.000| 116000|e9de95e3-b119-4441-bd1d-b27fc4516022|2013-07-16 00:00:00.000| 274|2013-11-30 00:00:00.000| 84000|7cea47b5-8391-4414-a866-ff6ec6628cd3|2013-10-16 00:00:00.000| 274|2014-03-01 00:00:00.000| 187000|0cfb6474-20aa-46d3-a5c0-29dba2eda025|2014-01-15 00:00:00.000| -- more --
Sample Solution:
-- Selecting specific columns from the salespersonquotahistory table
SELECT
-- Extracting the year part from the quotadate and aliasing it as Year
date_part('year', quotadate) AS Year,
-- Extracting the quarter part from the quotadate and aliasing it as Quarter
date_part('quarter', quotadate) AS Quarter,
-- Selecting the SalesQuota column
SalesQuota AS SalesQuota,
-- Using the LEAD window function to get the next SalesQuota, defaulting to 0 if not available
LEAD(SalesQuota, 1, 0) OVER (
-- Ordering the data by year and quarter
ORDER BY date_part('year', quotadate), date_part('quarter', quotadate)
) AS NextQuota,
-- Calculating the difference between SalesQuota and the next SalesQuota
SalesQuota - LEAD(SalesQuota, 1, 0) OVER (
-- Ordering the data by year and quarter
ORDER BY date_part('year', quotadate), date_part('quarter', quotadate)
) AS Diff
-- Filtering data for a specific salesperson identified by businessentityid
FROM
sales.salespersonquotahistory
-- Filtering records for the salesperson with ID 277 and the years 2012 and 2013
WHERE
businessentityid = 277
AND date_part('year', quotadate) IN (2012, 2013)
-- Ordering the result set by year and quarter
ORDER BY
date_part('year', quotadate), date_part('quarter', quotadate);
Explanation:
- This SQL code operates on a table named sales.salespersonquotahistory.
- It retrieves data related to sales quotas for a specific salesperson (identified by businessentityid) for the years 2012 and 2013.
- The retrieved data includes the year (quotadate extracted and aliased as Year), quarter (quotadate extracted and aliased as Quarter), sales quota (SalesQuota), the next sales quota (NextQuota) using the LEAD window function, and the difference between the current sales quota and the next sales quota (Diff).
- The LEAD function is used to fetch the next value of SalesQuota, with a default of 0 if the next value is not available.
- The data is ordered by year and quarter.
Sample Output:
year |quarter|salesquota|nextquota|diff | ------+-------+----------+---------+-------+ 2012.0| 1.0| 952000| 1600000|-648000| 2012.0| 2.0| 1600000| 1352000| 248000| 2012.0| 3.0| 1352000| 839000| 513000| 2012.0| 4.0| 839000| 1369000|-530000| 2013.0| 1.0| 1369000| 1171000| 198000| 2013.0| 2.0| 1171000| 971000| 200000| 2013.0| 3.0| 971000| 714000| 257000|
SQL AdventureWorks Editor:
Practice Online
Contribute your code and comments through Disqus.
Previous: Compare year-to-date sales between employees for specific terrotery.
Next: Obtain the salary percentile of each employee for a department.
What is the difficulty level of this exercise?
Test your Programming skills with w3resource's quiz.
It will be nice if you may share this link in any developer community or anywhere else, from where other developers may find this content. Thanks.
https://w3resource.com/sql-exercises/adventureworks/sql-adventureworks-exercise-111.php
- Weekly Trends and Language Statistics
- Weekly Trends and Language Statistics