एक संभावित समाधान HAVING
. का उपयोग करना है और 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
)
अगर 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, 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
)
ठीक है और अगला संस्करण जो 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
)