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;