有一张销售产品的表格。
| 行标识|顾客|积|销售日期|
| - ------|- ------|- ------|- ------|
| 1个|客户_1|辛加吉格|二○二三年一月一日|
| 第二章|客户_12|沃西沃西|二○二三年一月三日|
| 三个|客户_1|沃查马卡利特|二零二三年一月四日|
| 四个|客户_4|沃西沃西|二○二三年一月六日|
| ...|...|...|...|
每个项目始终占一行。
假设customer_1
总共订购了100个项目。customer_2
总共订购了50个项目。customer_3
总共订购了17个项目。**如何为每个客户随机选择10%的行?**所选行的分数应向上舍入(例如,总共12行结果中选择了2行)。这意味着至少购买了一个项目的每个客户都应该出现在结果表中。在这种情况下,customer_1
、customer_2
和customer_3
的结果表将具有10 + 5 + 2 = 17行。
我最初的方法是创建一个临时表,为每个客户计算所需的行数,然后循环遍历临时表,为每个客户选择行,然后将它们插入到另一个表中,并从该表中进行选择:
drop table if exists #row_counts
select
customer
ceiling(convert(decimal(10, 2), count(product)) / 10) as row_count
into #row_counts
from products_sold
group by customer
-- then use cursor to loop over #row_counts and insert into the final table
-- for randomness an 'order by newid()' will be used
但这不是个好办法...
1条答案
按热度按时间qojgxg4l1#
你需要知道你想要的东西的总数和行数。类似下面这样的东西可能会有用:
由于未正确随机化而编辑: