Mysql 使用sum和max组合查找最大值

Mysql 使用sum和max组合查找最大值,mysql,Mysql,样本数据 +----+------------+-------+------------+ | ID | first_name | sales | sale_date | +----+------------+-------+------------+ | 1 | Lindsey | 32.02 | 2007-03-12 | | 2 | Nicole | 26.53 | 2007-03-12 | | 3 | Britney | 11.25 | 2007-03-12 |

样本数据

+----+------------+-------+------------+
| ID | first_name | sales | sale_date  |
+----+------------+-------+------------+
|  1 | Lindsey    | 32.02 | 2007-03-12 |
|  2 | Nicole     | 26.53 | 2007-03-12 |
|  3 | Britney    | 11.25 | 2007-03-12 |
|  4 | Ashley     | 18.96 | 2007-03-12 |
|  5 | Lindsey    |  9.16 | 2007-03-11 |
|  6 | Nicole     |  1.52 | 2007-03-11 |
|  7 | Britney    | 43.21 | 2007-03-11 |
|  8 | Ashley     |  8.05 | 2007-03-11 |
|  9 | Lindsey    | 17.62 | 2007-03-10 |
| 10 | Nicole     | 24.19 | 2007-03-10 |
| 11 | Britney    |  3.40 | 2007-03-10 |
| 12 | Ashley     | 15.21 | 2007-03-10 |
| 13 | Lindsey    |  0.00 | 2007-03-09 |
| 14 | Nicole     | 31.99 | 2007-03-09 |
+----+------------+-------+------------+
我试图找出这个女孩的最大总销售额

通过使用此查询,我可以找到最大的总销售额

select first_name, sum(sales) as total 
   from cookie_sales 
   group by first_name 
   order by total desc limit 1;
我想知道是否有一种方法可以使用聚合
max
函数找到相同的值
如果我用这样的东西

select first_name, max(sum(sales)) from cookie_sales group by first_name;
我将得到1111 Mysql错误(组函数使用无效)


有办法吗?

您可以尝试创建一个视图,然后尝试MAX。大概是这样的:

CREATE VIEW sales_sums AS
select first_name, sum(sales) as total 
   from cookie_sales 
   group by first_name 
   order by total desc limit 1;


SELECT first_name, MAX(total ) AS max_total
FROM sales_sums
GROUP BY first_name

您可以通过以下方式使用MAX函数:

SELECT MAX(sum_sales)
FROM (
  SELECT first_name, SUM(sales) sum_sales
  FROM cookie_sales
  GROUP BY first_name
) s

但是如果你还需要得到名字,这个查询会比原来的查询复杂一点。

有一种方法;您需要使用足够新的MySQL版本来支持子查询(应该是5.0或更高版本):


您最初在问题中编写的查询可能是最好的方法。我不明白那样会有什么问题。无需在此处使用子查询。

您是否正在尝试查找销售额最高的人?或者试图找到每个人的销售总额和最大销售金额?@MikeBrant person销售总额高的人那么你的第一个查询就是这样做的方法。ic,所以基本上没有办法不使用子查询就使用
MAX
?@MikeBrant好的,非常感谢你,不需要查看子查询什么时候行,通常对数据库具有选择权限,这是子查询所需的全部权限,但不具有创建权限,
创建视图所需的权限,当问题中写入的初始查询是最佳方法时。从该查询中删除最后2行时会发生什么情况:按名字分组限制0,1;你认为它仍然会给出正确的答案吗?现在我想起来,可能不会;我完全知道如何在子查询中使用max,我只是想知道有没有不使用子查询的方法我同意上面迈克的回答。另外,如果你从Aaron的答案中删除最后2行,那么当有超过1个女孩的总销售额达到最大值时,也可以处理这种情况。不,只是想知道有没有更好的方法来做到这一点,谢谢你的输入
SELECT first_name, MAX(total) FROM 
  (SELECT first_name, SUM(sales) AS total
   FROM cookie_sales
   GROUP BY first_name
   ORDER BY total DESC) sum_query
GROUP BY first_name
LIMIT 0, 1;