【问题标题】:Choose an aggregate function for Group BY in SQL Server在 SQL Server 中为 Group BY 选择聚合函数
【发布时间】:2010-12-14 14:57:50
【问题描述】:

我有一个这样的查询:

Select Count(*) as TotalCount, Object2_ID, Object_ID, Object_Description
from Table1 
inner join table2 on...  
Group BY Object2_ID, Object_ID

我无法运行此查询,因为 Object_Description 列不在 GROUP BY 中或在聚合函数下。 Object_Description 是一个文本列。我需要Object_Description 的任何值。现在我使用MAX(Object_Description),因为它给了我正确的结果,因为Object_Description对于每个组都是相同的。

我可以使用 MAX()MIN() 等 - 我会在我的查询中得到正确的结果。

问题是 - 最充分的方法是什么?

我认为MAX()MIN() 产生的开销很小。

【问题讨论】:

  • 发布这些表的架构。
  • 我觉得这个问题不用回答了吧?我的真实查询包含 5 个表和很多条件。我写了简化的信息。

标签: sql-server group-by sql-server-2008-r2


【解决方案1】:

你可以在计算数量之后得到对象描述(假设描述在表1中,你需要从表2中获取计数):

SELECT Object_Id, Object_Description, Qty
FROM
( 
  SELECT Object_Id, Count(*) Qty
  FROM Table2
  GROUP BY Object_Id
) t 
JOIN Table1 t2 on t2.Object_Id = t.Object_Id

【讨论】:

  • 你真的认为额外的选择和额外的连接(在我的例子中 - 表中的几百万行)产生的开销比文本列上的 MAX() 少......
  • @mmcteam.com.ua:只有一种方法可以找到它:配置它!使用您自己的数据、您自己的表格、您自己的服务器。
  • @marc_s:我已经分析过了。我想回答它是否存在作为 ANY() 或其他变体的聚合函数。我也知道@Michael 提供的解决方案。还有一种更有效的方法可以在 Group By 中添加 Object_Description,我也会得到正确的结果。我正在寻找性能最佳的解决方案。迈克尔的解决方案甚至比我在帖子中提供的还要糟糕。我正在寻找另一个或一些链接来解释这些方法的优点/缺点。
  • @mmcteam.com.ua,如果您为查询中使用的表提供架构,它将对我们(或至少执行计划)非常有帮助。否则我们讨论的是相当抽象的事情。
  • @mmcteam:您提供的解决方案不起作用。它执行得更快有什么关系?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-07
  • 1970-01-01
  • 1970-01-01
  • 2014-08-24
  • 2014-12-27
  • 1970-01-01
相关资源
最近更新 更多