(我希望我能提出一个更具描述性的标题…如果您可以命名我要询问的查询类型,则建议一个或编辑这篇文章)
数据库: SQL Server 2000
样本数据(假设有500,000行):
Name Candy PreferenceFactor Jim Chocolate 1.0 Brad Lemon Drop .9 Brad Chocolate .1 Chris Chocolate .5 Chris Candy Cane .5 499,995 more rows...
请注意,具有给定“名称”的行数是无限制的。
所需的查询结果:
Jim Chocolate 1.0 Brad Lemon Drop .9 Chris Chocolate .5 ~250,000 more rows...
(由于Chris对Candy Cane和Chocolate的偏爱相同,因此获得一致的结果就足够了)。
问题: 如何从数据中选择名称,糖果,其中每个结果行包含一个唯一的名称,以使所选的糖果对每个名称具有最高的PreferenceFactor。(首选快速有效的答案)。
表格上需要哪些索引?如果Name和Candy是另一个表的整数索引(除了需要一些连接),这会有所不同吗?
select c.Name, max(c.Candy) as Candy, max(c.PreferenceFactor) as PreferenceFactor from Candy c inner join ( select Name, max(PreferenceFactor) as MaxPreferenceFactor from Candy group by Name ) cm on c.Name = cm.Name and c.PreferenceFactor = cm.MaxPreferenceFactor group by c.Name order by PreferenceFactor desc, Name