求分组取前60的SQL话语
求分组取前60的SQL语句有一组数据,字段为:单位、姓名,数据有若干个单位。要求在单位随机选出60名员工,不足60
求分组取前60的SQL语句
有一组数据,字段为:单位、姓名,数据有若干个单位。要求在单位随机选出60名员工,不足60人的单位,全部员工都选出来,求SQL语名,谢谢!
之前的思路,试了一下row_number() over(order by newid()) as rndid,然后通过查询各校rndid前60的员工,但查询时随机数在变化,无法确认前60的员工。
请各位高手的思路及SQL。谢谢!
[最优解释]
select 单位,姓名
from (
select 单位,姓名,row_number() over(partition by 单位 order by newid()) as rndid
from TB ) as a
where rndid<61
[其他解释]既然随机60位 ,当然每次查询都不一样了。如果供后续查询 必须永久存到表中。
[其他解释]你本来就是随机60的。如果有条件的60那么才能只以查询的方式。
你应该保存为了一个实体表。
[其他解释]看看看看
[其他解释]这个。。。。那你只能从每个单位随机取人数了 但是部门总数又不固定
所以很难办的。
[其他解释]太多的随机查询容易导致逻辑混乱和编写复杂,先要考虑必要性、可行性才去实现
[其他解释]你的要求是随机选出60名员工,那么为了保证后续查询的一致,考虑把查询结果保存到实体表。至于你后面提出的问题,保证每个部门人数较为相等。这个不好搞,首先你单位部门数量不一致,其次单位部门设置也不一致
[其他解释]创建临时表或者增加一个存储随机数的字段,随机数倒是可以固定下来,供后续查询。求更估的方法
[其他解释]试了一下行得通。谢谢!
如果信息包括(单位,部门,姓名),同样是各单位随机60人,各单位部门设置数量不一样,能否使其在各部门产生的人数较为相等