Sql server 按分组的操作计数

Sql server 按分组的操作计数,sql-server,group-by,Sql Server,Group By,最近在我的同事的代码中,我看到了一个sql查询,她使用了groupby,其中有很多列。这些列中的大多数不需要在查询中分组。她这样做是为了防止这个错误: 列“some_col”在选择列表中无效,因为它是 不包含在聚合函数或GROUP BY子句中 我想知道groupby的有多重,使用这样的语句可以吗?如果查询量太大,我最好对她进行优化,因为我现在正在处理这段代码。如果没有看到具体的查询,很难确定,但我曾经通过最小化GROUP by中包含的列数来获得惊人的性能提高(至少在SQL2K中),并使用内部查询

最近在我的同事的代码中,我看到了一个sql查询,她使用了
groupby
,其中有很多列。这些列中的大多数不需要在查询中分组。她这样做是为了防止这个错误:

列“some_col”在选择列表中无效,因为它是 不包含在聚合函数或GROUP BY子句中


我想知道groupby的
有多重,使用这样的语句可以吗?如果查询量太大,我最好对她进行优化,因为我现在正在处理这段代码。

如果没有看到具体的查询,很难确定,但我曾经通过最小化GROUP by中包含的列数来获得惊人的性能提高(至少在SQL2K中),并使用内部查询上的join将这些列解析回来。更具体地说:假设您有分类OrderDetails(OrderID、ProductID、Quantity、Price)和Products(ProductID、ProductName)表。更改此查询:

select P.ProductID, ProductName, sum(Quantity * Price)
from Products as P
  inner join OrderDetails as OD on P.ProductID = OD.ProductID
group by P.ProductID, ProductName
为此:

select X.ProductID, PP.ProductName, X.OrderValue
from
  (
    select P.ProductID, sum(Quantity * Price) as OrderValue
    from Products as P
       inner join OrderDetails as OD on P.ProductID = OD.ProductID
    group by P.ProductID
  ) as X
    inner join Products as PP on X.ProductID = P.ProductID

即使有两个连接到同一个表,也会给我带来性能提升,因为在整数索引上分组比在文本值、未排序的产品名称上分组更快。

如果没有看到具体的查询,很难确定,但我过去曾获得过令人惊讶的性能提升(至少在SQL2K中)通过最小化GROUPBY中包含的列数,并在内部查询上使用join解析这些列。更具体地说:假设您有分类OrderDetails(OrderID、ProductID、Quantity、Price)和Products(ProductID、ProductName)表。更改此查询:

select P.ProductID, ProductName, sum(Quantity * Price)
from Products as P
  inner join OrderDetails as OD on P.ProductID = OD.ProductID
group by P.ProductID, ProductName
为此:

select X.ProductID, PP.ProductName, X.OrderValue
from
  (
    select P.ProductID, sum(Quantity * Price) as OrderValue
    from Products as P
       inner join OrderDetails as OD on P.ProductID = OD.ProductID
    group by P.ProductID
  ) as X
    inner join Products as PP on X.ProductID = P.ProductID
即使有两个连接到同一个表,也会给我带来性能提升,因为在整数索引上分组比在文本值、未排序的产品名称上分组更快