【dawugui】大侠 请教问题

wackyboy 2010-07-02 06:27:21
我想请教一下

SELECT * FROM (
SELECT ROW_NUMBER() OVER (PARTITION BY 产品,卖场 ORDER BY NEWID()) 'ID',* FROM TABLE1
) T WHERE ID<=3


select t.* from table1 t where 销售人员 in (select top 3 销售人员 from table1 where 产品 = t.产品 and 卖场 = t.卖场 order by 销售人员) order by 产品 , 卖场 , 销售人员


有什么区别 那种效率会好些
非常感谢

原帖 http://topic.csdn.net/u/20100702/18/3baf07a9-8205-4245-8d9e-c9dff1eea27b.html?1720148943
非常感谢
...全文
50 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
wackyboy 2010-07-02
  • 打赏
  • 举报
回复
非常感谢 各位 非常感谢
dawugui 2010-07-02
  • 打赏
  • 举报
回复
第一个建议更改为:

SELECT * FROM (
SELECT ROW_NUMBER() OVER (PARTITION BY 产品,卖场 ORDER BY 销售人员 ) ID,* FROM TABLE1
) T WHERE ID<=3

或:
SELECT * FROM (
SELECT ROW_NUMBER() OVER (PARTITION BY 产品,卖场 ORDER BY 销售人员 desc) ID,* FROM TABLE1
) T WHERE ID<=3

SQL_Hhy 2010-07-02
  • 打赏
  • 举报
回复
row——number 会略好
dawugui 2010-07-02
  • 打赏
  • 举报
回复
如果针对产品+卖场+销售人员建立索引的话,在sql 2005中,第一个略快一些.

如果是在sql 2000中的话,则只能用第二句,第一句不能使用.
SQL_Hhy 2010-07-02
  • 打赏
  • 举报
回复
两个功能不一样吧
第一个 order by newid() 会开销很大的
第二个 order by 后面的字段好多。。。。开销同样不小
Mr_Nice 2010-07-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lds1ove 的回复:]

一般来说 子查询的效率比较低
[/Quote]


子查询会低一些的。
dawugui 2010-07-02
  • 打赏
  • 举报
回复
这两种效率都不高.

但是你的需求是求每...各三个的话,貌似没有好的办法.
SQL_Hhy 2010-07-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lds1ove 的回复:]

一般来说 子查询的效率比较低
[/Quote]
两个都是子查询
lds1ove 2010-07-02
  • 打赏
  • 举报
回复
一般来说 子查询的效率比较低

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧