Salah satu solusi yang mungkin adalah menggunakan HAVING
dan 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
)
jika ALL
tidak bekerja untuk Anda. Anda dapat mengubahnya seperti ini
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 dan versi berikutnya yang menghindari subquery berkorelasi di belakang 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
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
)