Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.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 - Fatal编程技术网

MySql:查找按列分组的和的最大值

MySql:查找按列分组的和的最大值,mysql,Mysql,我有一个表,其中包括名称、项目、类型和每个项目的计数。我需要找到一种方法来确定每个类型中具有最大计数的名称 SELECT type, MAX(count) AS max_count FROM totals GROUP BY type 示例表: --------------------------------------- | name | item | type | count | | ------------------------------------| | Dave

我有一个表,其中包括名称、项目、类型和每个项目的计数。我需要找到一种方法来确定每个类型中具有最大计数的名称

SELECT type, MAX(count) AS max_count
FROM totals
GROUP BY type
示例表:

---------------------------------------
| name | item     | type      | count |
| ------------------------------------|
| Dave | carrot   | vegetable | 2     |
| Dave | broccoli | vegetable | 3     |
| Tom  | spinach  | vegetable | 2     |
| Jon  | swiss    | cheese    | 3     |
| Mark | cheddar  | cheese    | 5     |
| Jon  | cheddar  | cheese    | 6     |
| Tony | onion    | vegetable | 3     |
我想找到每种类型中总和(计数)最高的每个人的名字。这是我的预期结果:

----------------------------
| name | type      | count |
| -------------------------|
| Dave | vegetable | 5     |
| Jon  | cheese    | 9     |

我想看看是否有一种优雅的方法可以做到这一点,而不是查询每个名字,然后手动计算最大值。

在我面前没有数据库的情况下,试一试:

SELECT * FROM Table T 
  LEFT JOIN (SELECT type, MAX(count) AS max FROM Table GROUP BY type) AS maxType 
  ON T.type = maxType.type 
    AND t.count = max.count

首先计算每个名称/类别组合的总数。在子查询或视图中执行此操作。我将选择一个视图来减少代码膨胀,因为它需要多次

CREATE VIEW totals AS
SELECT name, type, SUM(count) AS count
FROM yourtable
GROUP BY name, type
------------------------- |类型|最大计数| | ----------------------- |蔬菜| 5| |奶酪| 9| -------------------------
现在您只需要查询(type,count)等于第二个结果集中任何一对的所有行的视图
totals
。我已经为你做了大部分工作。我让你来完成它。

这可能不是最优的,但它非常简单:

SELECT name, type, MAX(count) as count FROM (
   SELECT name, type, SUM(count) as count
    FROM mytable
    GROUP BY type, name
) as rank
GROUP BY type;
内部查询返回每个名称以及该名称的类型总和,如:

NAME    TYPE    COUNT
Jon     cheese      9
Dave    vegetable   5
Mark    cheese      5
Tony    vegetable   3
Tom     vegetable   2
然后外部查询按类型分组,因此每个类型只返回一个名称,having max()返回类型的顶级名称


这不会返回并列的名称,但会返回不同类型的相同名称,因此,如果突然给Dave 10个瑞士名称,他会出现在蔬菜和奶酪的顶部。

如果出现并列的情况,会发生什么?应该是9,我很快就搞糟了。理想情况下,领带会显示所有的平局结果,但如果只有一个显示,这是可以的。很高兴能提供帮助!请记住,接受答案与给予答案的用户一样有助于提高您的声誉。我使用“总计”视图加入了max result查询,并选择了匹配的行。这给了我想要的确切结果@做记号
SELECT name, type, MAX(count) as count FROM (
   SELECT name, type, SUM(count) as count
    FROM mytable
    GROUP BY type, name
) as rank
GROUP BY type;
NAME    TYPE    COUNT
Jon     cheese      9
Dave    vegetable   5
Mark    cheese      5
Tony    vegetable   3
Tom     vegetable   2