Blog

Display all months where sales exceeded the average monthly sales.

This question was asked in Interview at black rock. Read more

Company: BlackRock

CTC: 26LPA

SourceLinkedIn

SQL Interview Question

Q. Display all months where sales exceeded the average monthly sales

-- Create the Sales table
CREATE TABLE Sales (
    SaleID INT PRIMARY KEY,
    Month VARCHAR(7),
    Sales DECIMAL(10, 2)
);

-- Insert sample data into Sales table
INSERT INTO Sales (SaleID, Month, Sales) VALUES
(1, '2024-01', 5000.00),
(2, '2024-01', 3000.00),
(3, '2024-02', 4000.00),
(4, '2024-02', 7000.00),
(5, '2024-03', 8000.00),
(6, '2024-03', 2000.00),
(7, '2024-03', 6000.00),
(8, '2024-04', 9000.00),
(9, '2024-04', 10000.00),
(10, '2024-05', 3000.00);

see this code on db-fiddle

Solution

Solution 1

WITH MonthlySales AS (
    SELECT 
        Month, 
        SUM(Sales) AS MonthlySales
    FROM 
        Sales
    GROUP BY 
        Month
),
AverageSales AS (
    SELECT 
        AVG(MonthlySales) AS AvgMonthlySales
    FROM 
        MonthlySales
)
SELECT 
    ms.Month, 
    ms.MonthlySales
FROM 
    MonthlySales ms
JOIN 
    AverageSales a
ON 
    ms.MonthlySales > a.AvgMonthlySales;

Solution 2

SELECT 
    Month, 
    SUM(Sales) AS MonthlySales
FROM 
    Sales
GROUP BY 
    Month
HAVING 
    SUM(Sales) > (
        SELECT AVG(MonthlySales)
        FROM (
            SELECT 
                SUM(Sales) AS MonthlySales
            FROM 
                Sales
            GROUP BY 
                Month
        ) AS MonthlyAverages
    );

Explanation

Although there are multiple ways to solve this problem, using the CTE method stands out as the most efficient, clear, and cost-effective approach.

We started by calculating the monthly sales, which we did by using the SUM() function on the sales column and grouping the data by Month. The result for this query looks like this:

MonthMonthlySales
January8000
February11000
March16000
April19000

Next, we calculated the average monthly sales using the AVG() function on MonthlySales. This gave us a single value representing the average monthly sales:

AvgMonthlySales
11666.67

Finally, we joined the AverageSales with the MonthlySales table, applying the condition that we should only keep the rows where MonthlySales > AvgMonthlySales. This resulted in:

  • For January: 800 (January Sales) is not greater than 11666.67 (average), so it is excluded.
  • For February: 11000 (February Sales) is not greater than 11666.67 (average), so it is excluded.
  • For March: 16000 (March Sales) is greater than 11666.67 (average), so it remains in the result.
  • For April: 19000 (April Sales) is greater than 11666.67 (average), so it remains in the result

I hope this would have been helpful for you, consider sharing it with your friends. thank you.

Spread the love

Recent Posts

SQL Interview Question at Zomato for a Data analyst Position (0-3 Years) – | Shared By An Experienced Data Analyst

SQL Interview Question at Zomato: These questions were recently asked in interview at Zomato, you…

6 days ago

The Ultimate Guide to SQL Indexing and Query Optimization

Introduction: SQL Indexing and Query Optimization SQL indexing is a critical concept that can drastically…

2 weeks ago

SQL Interview Questions Asked In Walmart For Data Analyst Post | CTC – 18 LPA | Learn With Curious Club!!

This article is about the SQL Interview Questions asked by Walmart for their Data Analyst…

2 weeks ago

SQL Interview Questions for Deloitte Data Engineer Roles: Your Ultimate Prep Guide

You must be able to answer these SQL Interview Questions if you are applying for…

3 weeks ago

Data Analyst SQL Interview Questions | EY (Ernst & Young) | Shared By An Experienced Data Analyst

This article tackles common SQL Interview Questions asked by EY, offering detailed solutions and explanations…

3 weeks ago

1164 Product Price at a Given Date

1164. Product Price at a Given Date: Learn how to track and select price from…

1 month ago