Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL-如何过滤和显示组中的最大值?_Mysql_Sql - Fatal编程技术网

MySQL-如何过滤和显示组中的最大值?

MySQL-如何过滤和显示组中的最大值?,mysql,sql,Mysql,Sql,我创建了以下查询,该查询将为我提供数据库中所有门店的销售数据: 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_Paym

我创建了以下查询,该查询将为我提供数据库中所有门店的销售数据:

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
查询执行并返回数据。它应该给我每个商店的顶级销售人员,以及从查询中可以看到的其他数据

我遇到的问题是,对于某些商店,它返回的员工不止一人,而“总销售额”明显不同。例如,对于商店A,它将返回John(销售额=1000英镑)和Martin(销售额=2000英镑)。我希望它只返回销售价值最高的员工

如何更改查询,使其仅返回每家店铺销售额最高的员工

下面的链接将让您了解这些表的外观:
一种可能的解决方案是使用
拥有
全部

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
) 

查询是否真的像编写的那样运行正常?您正在将e.shopid按
放入
组中,但它没有出现在
SELECT
子句中的任何位置。在您的查询中,它在哪里指定您只希望返回最大值?其中一个表应该已经有了销售额最高的销售人员吗?@PatJones是的,它正在运行我刚刚测试过它现在你有fss_付款模式吗?@PatJones是的,刚刚更新了它。在
第10行有
'LIMIT 0,25'的语法错误
我在query中没有限制它说发现了两个错误
无法识别的关键字。(位置337的“全部”附近)
意外标记。(靠近)(“位置340)
Removing
ALL
删除语法错误,但是MySQL给出另一个错误,说
子查询返回多行
@holdtheck尝试第二个版本