【问题标题】:How does group by statement in SQL affect the results ?SQL 中的 group by 语句如何影响结果?
【发布时间】:2013-07-24 15:25:30
【问题描述】:

是否通过更改结果中的行数在组中包含额外的列?

我正在对表 A(col1,col2....col9) 进行选择查询,我首先包含了

select col1,col2,col3 
from A where col1 = (condition) 
group by col1, col2, col3

这给我带来了一定数量的结果。

现在我把查询改成了这个

`select col1,col2,col3, col8,col9 
from A where col1=(condition) 
group by col1,col2,col3, col8,col9' 

我在结果中得到了不同数量的行。可能的解释是什么?

【问题讨论】:

  • 您正在向选择列表和分组依据添加列,如果这些列中有不同的值,那么您可能会得到不同的结果。
  • 您可能会带回重复记录,或者如果这些字段之一是唯一 ID,则将其添加到组中将带回每个记录。如果您向我们展示实际查询,我们可能会有更好的主意...
  • 查询是关于机密数据的,因此我不能在这里发帖。但我明白你的意思。并且额外的按列分组并不是唯一的。所以我想知道行更改会如何发生。

标签: sql performance sql-server-2008


【解决方案1】:

如果 col1、col2 和 col3 的组合不是唯一的,则可以有多行具有这三者的相同组合。

如果发生这种情况,并且那些重复的 col8 和/或 col9 的值不同,那么按这些额外的列进行分组将产生更多的行。

请注意,您可以使用select distinct 获得相同的结果。 group by 尤其适用于您想在其他列上进行聚合,例如,计算总和或计数,如下所示:

select 
  col1, col2, col3, 
  sum(col8) as total8 
from A 
group by col1, col2, col3

上面的查询将为您提供 col1、col2 和 col3 的每个唯一组合以及每个组合的所有 col8 的总和。

【讨论】:

    【解决方案2】:

    实质上,通过对这些列进行分组,您可以使分组列上的结果不同。因此,如果存在共有 1、2、3、18 和 19 列的行,它们将被折叠在一起。

    【讨论】:

      【解决方案3】:

      添加 GROUP BY 并不是解决此问题的真正正确方法,因为它不是按它尝试全面分组的一列进行分组,因此根据您查询的数据,您最终可能会得到更少或更多的结果.

      请问您对列进行分组的原因是什么?

      【讨论】:

      • 我正在尝试对列进行分组以向 SSRS 报告提供汇总数据。报告需要第 8 列和第 9 列,但如果我在选择中包含这些列,我需要将它们按右侧分组,因为它们没有聚合函数。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-15
      • 2020-10-26
      • 1970-01-01
      • 1970-01-01
      • 2012-11-23
      • 2021-08-26
      • 2020-04-01
      相关资源
      最近更新 更多