user表user_id user_name customer_id 1 a ss1 2 a ss2 . . . 200 z ss200customers表customer_id customer_name sequence ss1 sa 20 ss2 sb 36 . . . ss200 szxd 10SQL:select user_name,customer_namefrom user u,customer cwhere u.customer_id=c.customer_idorder by user_id,c.sequence结果:user_name customer_name a sa a sb a sc . . . z szxd这段SQL将user和customer管理起来,我现在想根据 user来进行分组,取排序后每个user的前3条数据,想问下这样的SQL怎么写(注:使用的是Oracle数据库)
在你的基础上,提供一个思路吧:首先要使用ORACLE的伪列rownum,然后要想分组,你得有聚焦函数,否则是没有意义的。另外在group by 之后,必须要使用having子句。select中的rownum,可以没有。另外,由于使用了rownum作为分组条件,所以实际上,跟没分组效果一样的。但是这样使用语法上可以保证正确。如果没有count(*),group by是无法使用的。select rownum,user_name,customer_name,count(*) from user u,customer c where u.customer_id=c.customer_id group by rownum,user_name,customer_namehaving rownum<=3order by user_id,c.sequence