Chinaunix首页 | 论坛 | 博客
  • 博客访问: 61109
  • 博文数量: 9
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 190
  • 用 户 组: 普通用户
  • 注册时间: 2008-02-19 16:36
文章分类

全部博文(9)

文章存档

2008年(9)

我的朋友
最近访客

分类: WINDOWS

2008-03-21 16:02:33

【数据源】:
    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) |
给主人留下些什么吧!~~