sql >> Database >  >> RDS >> Mysql

MySQL - Hoe kan ik de maximale waarde van een groep filteren en weergeven?

Een mogelijke oplossing is om HAVING . te gebruiken en 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
GROUP BY 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
   GROUP BY e.empname
)

als ALL werkt niet voor jou. Je kunt het zo veranderen

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
GROUP BY 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
     GROUP BY emp.empname
   ) t
)

ok en de volgende versie die gecorreleerde subquery achter FROM vermijdt

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
GROUP BY 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
     GROUP BY emp.empname, emp.shopid
  ) t
  GROUP BY t.shopid
) 



  1. Wat is het verschil tussen utf8_general_ci en utf8_unicode_ci?

  2. Tortoise ORM voor Python geen relaties van entiteiten (Pyndantic, FastAPI)

  3. Zoeken naar de 5 dichtstbijzijnde locaties bij een postcode - welke kant moet ik op?

  4. Effectief omgaan met de NULL-waarden met de SQL COALESCE-functie voor beginners