如何在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子句中时,请自问该值对于所选记录集是否真的是唯一的。