Sql 获取每个类别类型计数的最佳方法

Sql 获取每个类别类型计数的最佳方法,sql,sql-server,Sql,Sql Server,我在下面有一个查询,它从两个不同的表返回产品标识、产品名称和类别名称 SELECT p.product_id, p.product_name, c.category_name FROM [BikeStore].[production].[products] p JOIN [BikeStore].[production].[categories] c ON p.category_id = c.category_id ORD

我在下面有一个查询,它从两个不同的表返回产品标识、产品名称和类别名称

SELECT p.product_id, 
       p.product_name, 
       c.category_name 
FROM   [BikeStore].[production].[products] p 
       JOIN [BikeStore].[production].[categories] c 
         ON p.category_id = c.category_id 
ORDER  BY c.category_name 

我想在每行旁边添加第四列,显示每个类别的数量

我写了如下这样的查询:

  SELECT p.product_id, 
       p.product_name, 
       c.category_name, 
       (SELECT Count(*) 
        FROM   [BikeStore].[production].[products] p1 
               JOIN [BikeStore].[production].[categories] c1 
                 ON p1.category_id = c1.category_id 
        WHERE  c1.category_id = c.category_id) AS totals 
FROM   [BikeStore].[production].[products] p 
       JOIN [BikeStore].[production].[categories] c 
         ON p.category_id = c.category_id 
ORDER  BY c.category_name 


我不确定这是否是正确的方法。如果有更好的方法,请告诉我。

您可以使用窗口功能:

SELECT p.product_id, 
       p.product_name, 
       c.category_name,
       COUNT(*) OVER (PARTITION BY c.category_name)
FROM [BikeStore].[production].[products] p JOIN
     [BikeStore].[production].[categories] c 
     ON p.category_id = c.category_id 
ORDER  BY c.category_name