我正在尝试找到将数据分组的最佳方法,例如Quintiles(5组)。我将使用此SQL来恢复SSRS报告的数据。
我目前正在做的是在名为#quintiles的临时表中选择3列(客户ID,客户支出和添加rownumber)。 数据按客户支出排序,从最高到最低。
- 编辑 -
我不太清楚,如果我说清楚,但通过按客户支出订购临时表,当我将其分成小组时,Q1是最高消费者,依此类推,Q5是我的最低消费者。
然后我使用以下case语句将它们分组为5. [tmp]是我的临时表#quintiles的别名,因为这个case部分在第二个SELECT语句中
CASE
WHEN tmp.Row_number <= ((SELECT COUNT (*) FROM #quintiles)/5)
THEN 'Q1'
WHEN tmp.Row_number BETWEEN ((SELECT COUNT (*) FROM #quintiles)/5) AND ((SELECT COUNT (*) FROM #quintiles)*2/5)
THEN 'Q2'
WHEN tmp.Row_number BETWEEN ((SELECT COUNT (*) FROM #quintiles)*2/5) AND ((SELECT COUNT (*) FROM #quintiles)*3/5)
THEN 'Q3'
WHEN tmp.Row_number BETWEEN ((SELECT COUNT (*) FROM #quintiles)*3/5) AND ((SELECT COUNT (*) FROM #quintiles)*4/5)
THEN 'Q4'
WHEN tmp.Row_number > ((SELECT COUNT (*) FROM #quintiles)*4/5)
THEN 'Q5'
END
现在可以使用,并确实将客户分为5组。我不能将总数除以5,好像有一个奇数客户我最终会得到0.5个客户在每个小组中!
我觉得这不是解决这个问题的最好办法。
我希望这是有道理的。
答案 0 :(得分:2)
您是否在查询中尝试过NTILE(排名函数)? See here 了解详情。
答案 1 :(得分:2)
使用NTILE
SELECT 'Q' + CAST(NTILE(5) OVER (ORDER BY customer_spend) AS VARCHAR(1)) AS Quintile