Sql server SQL中带有Where子句的GROUPBY
在groupby中使用DateTime列时,结果有所不同。有人能解释一下原因吗 查询:Sql server SQL中带有Where子句的GROUPBY,sql-server,Sql Server,在groupby中使用DateTime列时,结果有所不同。有人能解释一下原因吗 查询: Select Name, Source, Description, CreatedDate From testTable Where Source like '%Validating err%' And CreatedDate >='2016-12-01' Group By Name , Source, Description, CreatedDate Select Nam
Select Name, Source, Description, CreatedDate
From testTable
Where Source like '%Validating err%'
And CreatedDate >='2016-12-01'
Group By Name , Source, Description, CreatedDate
Select Name, Source, Description
From testTable
Where Source like '%Validating err%'
And CreatedDate >='2016-12-01'
Group By Name , Source, Description
结果:15行
上面的查询返回了大约15个结果。但是当我从groupby子句中删除CreatedDate列时,它只返回4个结果
查询:
Select Name, Source, Description, CreatedDate
From testTable
Where Source like '%Validating err%'
And CreatedDate >='2016-12-01'
Group By Name , Source, Description, CreatedDate
Select Name, Source, Description
From testTable
Where Source like '%Validating err%'
And CreatedDate >='2016-12-01'
Group By Name , Source, Description
结果:4行我添加这个答案只是为了@John的利益,这样他可以直观地理解为什么他的两个结果集有不同数量的记录 想象一下一张叫做shirts的桌子,它只有两列,大小和颜色。以下是一些示例数据:
size | color
S | red
S | green
S | blue
M | red
M | green
M | blue
L | red
L | green
L | blue
换句话说,衬衫有三种尺寸,每种尺寸有三种可能的颜色
现在,如果执行以下查询:
SELECT size
FROM shirts
GROUP BY size
您将返回三条记录,其中仅包含三种大小。但是,如果您执行以下操作:
SELECT size, color
FROM shirts
GROUP BY size, color
然后你会得到九张唱片,或是九组唱片。这里发生的一切是,添加另一列会创建新的可能的组组合,从而创建更多的组。同样的概念也适用于你在两个查询中看到的内容。我添加这个答案只是为了@John的利益,这样他可以直观地理解为什么他的两个结果集有不同数量的记录 想象一下一张叫做shirts的桌子,它只有两列,大小和颜色。以下是一些示例数据:
size | color
S | red
S | green
S | blue
M | red
M | green
M | blue
L | red
L | green
L | blue
换句话说,衬衫有三种尺寸,每种尺寸有三种可能的颜色
现在,如果执行以下查询:
SELECT size
FROM shirts
GROUP BY size
您将返回三条记录,其中仅包含三种大小。但是,如果您执行以下操作:
SELECT size, color
FROM shirts
GROUP BY size, color
然后你会得到九张唱片,或是九组唱片。这里发生的一切是,添加另一列会创建新的可能的组组合,从而创建更多的组。同样的概念也适用于您在两个查询中看到的内容。您使用>=而不是=筛选日期,因此这是显而易见的。另外,您的第二个查询还有CreatedDate,我认为这是一个typo@Prdp这些查询不应该在SQL Server中运行吗?也许在MySQL中。@TimBiegeleisen-我认为这是打字错误。。OP说查询正在返回记录这一点也不奇怪。有4个独特的组,由名称、来源、描述组成。添加日期列时,会创建更多组合,因此会有更多的组。@John-如果您希望两个查询产生相同数量的记录,只需将>=更改为=else,正如@tim在前面的评论中所提到的,很明显您现在已从组中删除了日期组较小您正在使用>=而不是=筛选日期,所以这很明显。另外,您的第二个查询还有CreatedDate,我认为这是一个typo@Prdp这些查询不应该在SQL Server中运行吗?也许在MySQL中。@TimBiegeleisen-我认为这是打字错误。。OP说查询正在返回记录这一点也不奇怪。有4个独特的组,由名称、来源、描述组成。当您添加“日期”列时,这将创建更多的组合,从而创建更多的组。@John-如果您希望两个查询产生相同数量的记录,只需将>=更改为=else,正如@tim在前面的注释中所提到的,很明显,您已从组中删除了日期,此时组较小