我有大量来自源的数据,每个记录都有一个维度dim1。 Dim1可以有多达一百万个唯一值。其中一些将有大量的数据,有些则会少一些。对于例如Dim1value1可能有100K条记录,Dim1value2可能有100万条记录,Dim1value3可能有10条记录等等。分区数据分成20个大致相等的SQL Server分区
现在我想将它们分组到一定程度相等的分区,以便与每个DIM1数据进入一个组,我要创建约20几分等于组。
基本上每个记录具有Dim1Value1应该进入一个组等。 这里是显示ntile如何不这样做的脚本。
IF OBJECT_ID('tempdb.dbo.#t') IS NOT NULL
DROP TABLE #t
CREATE TABLE #t
(
Dim1 varchar(100),
numberofrecs int
)
DECLARE @counter int = 1
WHILE(@counter < = 100)
BEGIN
INSERT #t
SELECT
'Dim1value' + CAST(@counter AS VARCHAR(10)),
CAST(RAND() * 100 AS INT)
SET @counter = @counter + 1
END
SELECT * FROM #t
SELECT
NTILE(5) OVER(order by numberofrecs),
Dim1, *
FROM #t
它是mysql还是sql-server?更新标签并仅保留相关供应商。 – Dekel
如果SQL Server考虑NTile()https://msdn.microsoft.com/en-us/library/ms175126.aspx –
我不认为ntile会这样做。我考虑过它,但它只是将度量分类,然后将我的维度分成n组。基本上它会把所有具有最高数字的维度放在同一组中。这不是我想要的...这个SQL脚本将demonostrate它... –