TSQL 窗口函数 Count - 帮助计算其他列中具有特定值的项目

问题描述 投票:0回答:2

我正在尝试计算某个尺码在每个商店、每个商品、每个颜色中出现的次数。我尝试过使用商店、商品和颜色分区的传统尺寸计数,但它返回该尺寸的总计数(不特定于商店、商品、颜色)。我试图简化我习惯的下面的#Clothes 表:

Example table #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)enter image description here

sql function t-sql count window-functions
2个回答
0
投票
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(在至少您会获取您提供的图像中可见的数据)。

我希望这是有道理的,并且代码适合您。


0
投票

当我计算行数时,我没有得到相同的错误分区。由于您的数据未共享,我用另一个示例对此进行了测试(仅从日期表中生成一些月份和日期值)。您可能只需将

COUNT(Size)
更改为
COUNT(1)

SELECT *,
COUNT(1) OVER( PARTITION BY Size, Store, Item, Color) AS Count 
From #Clothes
© www.soinside.com 2019 - 2024. All rights reserved.