SQL中的group by语句如何影响结果?

时间:2013-07-24 15:25:31

标签: sql performance sql-server-2008

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

我正在对表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' 

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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 :(得分:0)

添加GROUP BY并不是真正正确的方法,而不是按照它尝试分组的一列进行分组,这样根据您查询的数据,您可能会得到更少或更多的结果

请问您为什么要对这些列进行分组?