Recent Posts

HackerRank: [SQL Aggregation] (8/17) TOP EARNERS | group by, order by, limit, max & subquery function in SQL

HackerRank: [SQL Aggregation - 8/17] Top Earners | GROUP BY, ORDER BY, LIMIT, MAX & SUBQUERY Function in SQL
I started studying SQL from a very famous site - HackerRank. Here I will try to provide multiple approaches & solutions to the same problem. It will help you learn and understand SQL in a better way.

Please make use of my blog posts for learning purpose only and feel free to ask your questions in the comment box below in case of any doubt.

Click Here for the previous blog-post in the series.


SQL Problem Statement:

We define an employee's total earnings to be their monthly salary * months worked, and the maximum total earnings to be the maximum total earnings for any employee in the Employee table. Write a query to find the maximum total earnings for all employees as well as the total number of employees who have maximum total earnings. Then print these values as 2 space-separated integers.

Write a query calculating the amount of error (i.e.: actual - miscalculated average monthly salaries), and round it up to the next integer.



Input Format:

The Employee table containing employee data for a company is described as follows:

Employee Columns

where employee_id is an employee's ID number, name is their name, months is the total number of months they've been working for the company, and salary is the their monthly salary.


Sample Input:
Employee Sample Input

Sample Output:
69952 1

Explanation:
Employee Explanation

The table and earnings data is depicted in the following diagram:

The maximum earnings value is 69952. The only employee with earnings = 69952 is Kimberly, so we print the maximum earnings value (69952) and a count of the number of employees who have earned $69952 (which is 1) as two space-separated values.




Solution-1: Using GROUP BY, ORDER BY & LIMIT (MySQL Query):

SELECT (SALARY * MONTHS) as MAX_SAL, COUNT(*)
FROM EMPLOYEE
GROUP BY MAX_SAL
ORDER BY MAX_SAL DESC
LIMIT 1;

NOTE: 
  1. '*' operator is used for multiplying Salary & Months.
  2. Using ORDER BY MAX_SAL DESC, salaries are sorted in descending order of max_salary.
  3. LIMIT is used to limit the number of rows in the output. LIMIT 1 will return only the first row of the output. (Which will be the maximum salary due to order by desc clause.) 




Solution-2: Using GROUP BY & SUB-QUERY (MySQL Query):

SELECT SALARY*MONTHS, COUNT(*)
FROM EMPLOYEE
WHERE (SALARY*MONTHS) = (SELECT MAX(SALARY*MONTHS) FROM EMPLOYEE) 
GROUP BY SALARY*MONTHS;

NOTE: 
  1. '*' operator is used for multiplying Salary & Months.
  2. SUB-QUERY is used to get results only for maximum salary. 




Solution-3: Using MAX & SUB-QUERY (MySQL Query):

SELECT MAX(SALARY*MONTHS), COUNT(*)
FROM EMPLOYEE
WHERE (SALARY*MONTHS) = (SELECT MAX(SALARY*MONTHS) FROM EMPLOYEE);


NOTE: 
  1. MAX function used to get the Maximum (Largest) of the values of all the records in the column name passed to the function.
  2. SUB-QUERY is used to get results only for maximum salary.




Expected Output:

108064 7

--------------------------------------------------------------------------------
Click here to see solutions for all Machine Learning Coursera Assignments.
&
Click here to see more codes for Raspberry Pi 3 and similar Family.
&
Click here to see more codes for NodeMCU ESP8266 and similar Family.
&
Click here to see more codes for Arduino Mega (ATMega 2560) and similar Family.
Feel free to ask doubts in the comment section. I will try my best to answer it.
If you find this helpful by any mean like, comment and share the post.
This is the simplest way to encourage me to keep doing such work.

Thanks & Regards,
-Akshay P Daga

No comments