Skip to content Skip to sidebar Skip to footer

Mysql - How To Filter And Show Max Value From A Group?

I have created the following query that will give me sales figures from all the stores in my database: SELECT s.shopname AS 'Store', e.empname AS 'Employee', e1.empna

Solution 1:

One possible solution is to use HAVING and ALL

SELECT s.shopname AS"Store",
   e.empname AS"Employee",
   e1.empname AS"Manager",
   SUM(p.amount) AS"Total Sales"FROM fss_Shop s
   JOIN fss_Employee e ON e.shopid = s.shopid
   JOIN fss_Payment p ON p.empnin = e.empnin
   JOIN fss_Employee e1 ON e1.empnin = e.mgrnin
GROUPBY e.empname, s.shopid
HAVING SUM(p.amount) >= ALL(
   SELECT SUM(p.amount)
   FROM fss_Employee e
   JOIN fss_Payment p ON p.empnin = e.empnin
   WHERE e.shopid = s.shopid
   GROUPBY e.empname
)

if ALL doesn't work for you. You may change it like this

SELECT s.shopname AS"Store",
   e.empname AS"Employee",
   e1.empname AS"Manager",
   SUM(p.amount) AS"Total Sales"FROM fss_Shop s
   JOIN fss_Employee e ON e.shopid = s.shopid
   JOIN fss_Payment p ON p.empnin = e.empnin
   JOIN fss_Employee e1 ON e1.empnin = e.mgrnin
GROUPBY e.empname, e.shopid
HAVING SUM(p.amount) = (
   SELECT MAX(t.samount)
   FROM
   (
     SELECT SUM(p.amount) samount
     FROM fss_Employee emp
     JOIN fss_Payment p ON p.empnin = emp.empnin
     WHERE emp.shopid = e.shopid
     GROUPBY emp.empname
   ) t
)

ok and the next version that avoids correlated subquery behind FROM

SELECT s.shopname AS"Store",
   e.empname AS"Employee",
   e1.empname AS"Manager",
   SUM(p.amount) AS"Total Sales"FROM fss_Shop s
   JOIN fss_Employee e ON e.shopid = s.shopid
   JOIN fss_Payment p ON p.empnin = e.empnin
   JOIN fss_Employee e1 ON e1.empnin = e.mgrnin
GROUPBY e.empnin, e.shopid
HAVING (e.shopid, SUM(p.amount)) IN
(
  SELECT t.shopid, MAX(t.samount)
  FROM 
  (
     SELECT emp.shopid, SUM(p.amount) samount
     FROM fss_Employee emp
     JOIN fss_Payment p ON p.empnin = emp.empnin
     GROUPBY emp.empname, emp.shopid
  ) t
  GROUPBY t.shopid
) 

Post a Comment for "Mysql - How To Filter And Show Max Value From A Group?"