w3resource

PostgreSQL Aggregate Functions and Group By: Get the total salary, maximum, minimum and average salary of all posts for a particular department


12. Write a query to get the total salary, maximum, minimum and average salary of all posts for those departments which ID 90.

Sample Solution:

Code:

-- This SQL query retrieves various salary statistics for employees in department '90', grouped by job title.

SELECT job_id, -- Selects the job_id column
SUM(salary), -- Calculates the total salary for each job title in department '90'
AVG(salary), -- Calculates the average salary for each job title in department '90'
MAX(salary), -- Finds the maximum salary for each job title in department '90'
MIN(salary) -- Finds the minimum salary for each job title in department '90'
FROM employees -- Specifies the table from which to retrieve data, in this case, the employees table
WHERE department_id = '90' -- Filters the rows to include only those where department_id is '90'
GROUP BY job_id; -- Groups the results by job_id, so that the statistics are calculated for each unique job_id

Explanation:

  • The SQL query calculates various salary statistics (total, average, maximum, and minimum) for employees in department '90', grouped by job title.
  • The SELECT statement selects the job_id column along with the calculated statistics for each job title.
  • The SUM(salary) function calculates the total salary for each job title within department '90'.
  • The AVG(salary) function calculates the average salary for each job title within department '90'.
  • The MAX(salary) function finds the maximum salary for each job title within department '90'.
  • The MIN(salary) function finds the minimum salary for each job title within department '90'.
  • The FROM clause specifies the table from which to retrieve the data, which is the employees table.
  • The WHERE clause filters the rows to include only those where department_id is '90', ensuring that only employees from department '90' are considered.
  • The GROUP BY clause groups the results by job_id, so that the statistics are calculated for each unique job title within department '90'.
  • The result set will contain one row for each unique job_id, along with the total, average, maximum, and minimum salary for each job title within department '90'.

Sample table: employees


Output:

pg_exercises=# SELECT job_id, SUM(salary), AVG(salary), MAX(salary), MIN(salary)
pg_exercises-# FROM employees
pg_exercises-# WHERE department_id = '90'
pg_exercises-# GROUP BY job_id;
 job_id  |   sum    |        avg         |   max    |   min
---------+----------+--------------------+----------+----------
 AD_PRES | 24000.00 | 24000.000000000000 | 24000.00 | 24000.00
 AD_VP   | 34000.00 | 17000.000000000000 | 17000.00 | 17000.00
(2 rows)

Relational Algebra Expression:

Relational Algebra Expression: Get the total salary, maximum, minimum and average salary of all posts for a particular department.

Relational Algebra Tree:

Relational Algebra Tree: Get the total salary, maximum, minimum and average salary of all posts for a particular department.

Practice Online


Have another way to solve this solution? Contribute your code (and comments) through Disqus.

Previous: Write a query to get the average salary for each post excluding programmer.
Next: Write a query to get the job ID and maximum salary of each post for maximum salary is at or above $4000.

What is the difficulty level of this exercise?



Become a Patron!

Follow us on Facebook and Twitter for latest update.

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://www.w3resource.com/postgresql-exercises/aggregate-function-and-groupby/aggregate-function-and-groupby-exercise-12.php