Một giải pháp khả thi là sử dụng HAVING
và 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
)
if ALL
không hiệu quả với bạn. Bạn có thể thay đổi nó như thế này
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 và phiên bản tiếp theo tránh truy vấn con tương quan phía sau 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
)