除了Group By之外我还能使用什么?

时间:2017-11-05 14:19:05

标签: sql sql-server tsql group-by

我有一个使用此DML语句的问题

SELECT SupplierID, COUNT(*) AS TotalProducts
FROM Products
GROUP BY SupplierID;

我试图在不使用" Group By"的情况下获得相同的结果。我可以使用表变量或临时表,如果需要可以使用Insert和Update。此外,允许使用While和IF-Else。

我真的失去了任何帮助都会很棒。谢谢SO社区。

这在SQL Server中使用。再次感谢。

4 个答案:

答案 0 :(得分:6)

您可以随时使用SELECT DISTINCT窗口函数:

SELECT DISTINCT SupplierID,
       COUNT(*) OVER (PARTITION BY SupplierId) AS TotalProducts
FROM Products;

但是GROUP BY是编写聚合查询的正确方法。

答案 1 :(得分:3)

您也可以使用以下查询:

select distinct P.SupplierID, (select count(*) from Products 
where SupplierID=P.SupplierID) TotalProducts from Products P

使用上述查询您会得到相同的结果,但我不认为避免GROUP BY是个好主意!

答案 2 :(得分:2)

使用子查询:

SELECT DISTINCT SupplierID
      ,(SELECT COUNT(*) 
          FROM Products P2 
         WHERE P2.SupplierID = P.SupplierID
       ) AS TotalProducts
  FROM Products P

不同之处在于删除重复项......计数会针对每一行执行,因此如果没有区别,您将获得supplierID的重复答案。

答案 3 :(得分:1)

另一种方式

select distinct supplierId, p2.ttl
from products p1
cross apply
(
  select count(*)
  from products p2
  where p1.supplierId = p2.supplierId
) p2(ttl);