Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.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_Innodb - Fatal编程技术网

如何在MySQL中自连接聚合函数的结果?

如何在MySQL中自连接聚合函数的结果?,mysql,innodb,Mysql,Innodb,我有以下格式的一些数据: Table: MountHeights ID | Height| Type | ItemCode | Context -------------------------------------------- 1 | 15 | max | BD1896-1W | exterior 2 | 12 | max | BD1896-1W | insect 3 | 18 | max | BD1896-1W

我有以下格式的一些数据:

Table: MountHeights

ID  | Height| Type  |  ItemCode     |  Context
--------------------------------------------
1   | 15    | max   | BD1896-1W     | exterior
2   | 12    | max   | BD1896-1W     | insect
3   | 18    | max   | BD1896-1W     | interior
4   | 13    | max   | BD14120-1W    | exterior
5   | 10    | max   | BD14120-1W    | insect
6   | 15    | max   | BD14120-1W    | interior
每个项目代码都有多行

我正试图找出一种方法来获得每个
ItemCode
max(Height)
,其中
类型
='max',出于某种原因,我不能完全理解我应该如何引用表本身

我希望结果大致如下:

Results:

 max(Height)| ItemCode  
---------------------------
 18         | BD1896-1W
 15         | BD14120-1W

我该怎么做呢?

这里不需要自引用表格

SELECT `ItemCode`, MAX( `height` )
FROM `MountHeights`
WHERE `Type`= 'max'
GROUP BY `ItemCode`
您还可以执行以下操作:

SELECT t1.ItemCode,max(t1.height) as height
from MountHeights as t1, test as t2 
where t1.Type=t2.Type group by t1.Type

太快了,谢谢!我差点就吃了。我在最后尝试了不带“分组依据”的查询,但由于它只返回一个结果,我假设分组依据不会产生任何影响。您需要每个项目代码的最大高度,因此您当然必须按项目代码分组。大多数其他dbms会在语句中给您一个语法错误,因为它们要求每个选定的值要么在GROUPBY子句中,要么被聚合(使用MIN、MAX等)。这曾经是SQL标准,但自从SQL 99以来,这已经改变了;您可以拥有非分组、非聚合列,只要它们是唯一的。MySQL允许您选择ItemCode,而无需对其进行聚合或分组。不幸的是,它没有检查唯一性。当BD1896-1W和BD14120-1W同时出现时,它应该会产生一个错误。这个评论当然是在Zaemz的评论上。Sirko给出的答案非常好。我只是想向Zaemz解释为什么可以选择ItemCode并得到意外的结果。啊-我明白了。为了重申您所说的以确保我理解,如果我没有使用任何其他DBMS包含
GROUP BY
子句,我将收到一个错误。是的,正确。MySQL允许这样的查询很好,但不检查结果很糟糕。这使得这个特性在MySQL中有点危险。通常,当您按分组并且某个值既不在group by子句中,也不在group by子句中时,请自问该值对于所选记录集是否真的是唯一的。