日期:2014-05-17  浏览次数:20423 次

求分组取前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名员工,那么为了保证后续查询的一致,考虑把查询结果保存到实体表。至于你后面提出的问题,保证每个部门人数较为相等。这个不好搞,首先你单位部门数量不一致,其次单位部门设置也不一致