我正在尝试计算某个尺码在每个商店、每个商品、每个颜色中出现的次数。我尝试过使用商店、商品和颜色分区的传统尺寸计数,但它返回该尺寸的总计数(不特定于商店、商品、颜色)。我试图简化我习惯的下面的#Clothes 表:
每件商品最常见的尺寸、每家商店的每种颜色以及数量。
[![在此处输入图像描述][2]][2]
我会尝试这样做:
SELECT *,
COUNT(Size) OVER( PARTITION BY Size, Store, Item, Color) AS Count
From #Clothes
但这会显示该尺码的全部计数(例如 34 号尺码为 7,无论商店、商品或颜色如何)
有人可以分享一种更好的方法来执行窗口函数,通过函数的一部分来计算分区中每列的项目吗?
谢谢!
[2]: https://i.sstatic.net/5Aw8L.jpg![在此处输入图像描述](https://i.sstatic.net/nZ5ue.jpg)
SELECT
STORE
,ITEM
,COLOR
,SIZE
,COUNT(*)
FROM #Clothes
GROUP BY STORE, ITEM, COLOR, SIZE
希望我正确理解了你的意思。
您应该使用 GROUP BY,而不是使用 PARTITION BY。 例如,如果您改用 GROUP BY,并在 SELECT 中包含 COUNT(*),则对于 STORE = Target、ITEM = Shorts、COLOR = Green、SIZE = 32 的行,您将得到计数 2(在至少您会获取您提供的图像中可见的数据)。
我希望这是有道理的,并且代码适合您。
当我计算行数时,我没有得到相同的错误分区。由于您的数据未共享,我用另一个示例对此进行了测试(仅从日期表中生成一些月份和日期值)。您可能只需将
COUNT(Size)
更改为 COUNT(1)
。
SELECT *,
COUNT(1) OVER( PARTITION BY Size, Store, Item, Color) AS Count
From #Clothes