SQL多表查询:如何按指定列分组获取另一列的MAX值?
嘿,这个问题的核心其实是跨表关联后分组聚合,不过首先得确认一个关键前提:你的Colors表和Time表之间有没有关联字段呀?比如是不是有共同的记录ID、外键这类能把两张表的对应记录绑定起来的字段?毕竟要把Pigments和Hour对应上,总得有个“桥梁”才行对吧?
假设咱们现在有一个合理的关联字段(比如两张表都有RecordID,你可以换成实际的关联字段),下面给你两种常用的实现方案:
方案一:直接关联后分组聚合
这是最直观的写法,先通过关联字段把两张表连接起来,再按Pigments分组,取每组对应的Hour最大值:
SELECT c.Pigments, MAX(t.Hour) AS Max_Hour FROM Colors c JOIN Time t ON c.RecordID = t.RecordID -- 替换成你的实际关联条件 GROUP BY c.Pigments;
方案二:先聚合子表再关联
如果你的Time表数据量很大,或者关联逻辑比较复杂,可以先对Time表按关联字段聚合出最大Hour,再和Colors表关联,最后按Pigments分组:
SELECT c.Pigments, agg.Max_Hour FROM Colors c JOIN ( SELECT RecordID, MAX(Hour) AS Max_Hour FROM Time GROUP BY RecordID ) agg ON c.RecordID = agg.RecordID GROUP BY c.Pigments;
要是你还没明确两张表的关联关系,得先理清这个哦!不然没法准确把Pigments和对应的Hour匹配起来~
内容的提问来源于stack exchange,提问作者daekimtx
相关产品推荐
相关产品推荐

