【数据源】:
select * from tmp_zrp_t1 ;
PUB_NAME BOOK_NUMBER BOOK_NAME
出版社1 20 书1
出版社1 30 书2
出版社1 15 书3
出版社2 80 书4
出版社2 53 书5
出版社2 24 书6
出版社3 80 书7
出版社3 70 书8
出版社3 60 书9
-------------------------------------------
【目标】:提取出每个出版社的库存最大的书的名字和数量。
【解法】1:select pub_name,book_name,book_number
from tmp_zrp_t1 a where a.book_number =
(select max(book_number) from tmp_zrp_t1 b where b.pub_name = a.pub_name);
分析:让book.number等于出版社的最大书的数量。
【解法】2:select pub_name,book_name,book_number
from (select pub_name,book_name,book_number,dense_rank() over(partition by pub_name order by
book_number desc) rk from tmp_zrp_t1)
where rk=1;
分析:from后面的括号内的内容实际上是把表又增加了一rk列,说本行的数量在同一出版社排名情况,然后把排名第一的找出来,如果想找出最少的,只需要把DESC去掉即可。
over和partition by是分析语句。
阅读(541) | 评论(0) | 转发(0) |