• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            大龍的博客

            常用鏈接

            統計

            最新評論

            Oracle分組排序查詢

            最近遇到一場景: 
            查詢所有賬戶在某天的最新修改的記錄 

            其中,某些賬戶在同一天內可能不止修改一次。 


            把此查詢按討論中簡化一下,建一數據表 
            Sql代碼  收藏代碼
            1. CREATE TABLE HW  
            2. (DEPID NUMBER,  
            3. DEPT VARCHAR2(30),  
            4. AMOUNT NUMBER);  



            插入一些測試數據: 
            Sql代碼  收藏代碼
            1. INSERT INTO HW VALUES(10,'北京',100);  
            2. INSERT INTO HW VALUES(10,'上海',200);  
            3. INSERT INTO HW VALUES(10,'南京',300);  
            4. INSERT INTO HW VALUES(20,'山東',400);  
            5. INSERT INTO HW VALUES(20,'河南',500);  
            6. INSERT INTO HW VALUES(20,'河北',600);  
            7. INSERT INTO HW VALUES(30,'湖南',700);  
            8. INSERT INTO HW VALUES(30,'浙江',800);  
            9. INSERT INTO HW VALUES(30,'陜西',900);  


            查詢要求是: 
            要求用sql查詢每個分組中amount最大的前兩條記錄 

            這里提供兩種查詢:一種為不用子查詢的方法;另一種是使用子查詢的方法 

            不使用子查詢語句為: (簡單的分析函數的應用, 分析函數還包括rank()over(),dense_rank()over()等) 
            Sql代碼  收藏代碼
            1. SELECT * FROM  
            2. (SELECT T.*, ROW_NUMBER() OVER(PARTITION BY DEPID ORDER BY AMOUNT DESC) RN FROM HW T)  
            3. WHERE RN < 3  


            查詢的結果是: 
                 DEPID DEPT                               AMOUNT         RN 
            ---------- ------------------------------ ---------- ---------- 
                    10 南京                                  300          1 
                    10 上海                                  200          2 
                    20 河北                                  600          1 
                    20 河南                                  500          2 
                    30 陜西                                  900          1 
                    30 浙江                                  800          2 

            6 rows selected 



            使用子查詢的語句為: 
            Sql代碼  收藏代碼
            1. SELECT *  
            2. FROM HW tr  
            3. WHERE  
            4. (SELECT COUNT(*) FROM HW WHERE tr.DEPID=DEPID AND AMOUNT>tr.AMOUNT)< 2  
            5. ORDER BY DEPID, TR.AMOUNT DESC  



            查詢結果是: 
                 DEPID DEPT                               AMOUNT 
            ---------- ------------------------------ ---------- 
                    10 南京                                  300 
                    10 上海                                  200 
                    20 河北                                  600 
                    20 河南                                  500 
                    30 陜西                                  900 
                    30 浙江                                  800 

            6 rows selected 


            兩種查詢各有優缺點: 
            不用子查詢的方法利用了Oracle自身的查詢方法,效率會高此,但是給移稙帶來不利影響 
            子查詢的優點是可用于任何數據庫,但是效率差些 

            posted on 2011-09-16 16:44 大龍 閱讀(553) 評論(0)  編輯 收藏 引用

            超级碰久久免费公开视频| 人妻少妇久久中文字幕| 日本久久中文字幕| 偷偷做久久久久网站| 97久久精品国产精品青草| 久久综合五月丁香久久激情| 一本久道久久综合狠狠爱| 品成人欧美大片久久国产欧美...| 婷婷久久综合九色综合九七| 国产精品9999久久久久| 久久久久国产精品三级网| 国产精品久久久久a影院| 97精品伊人久久久大香线蕉| 国产精品美女久久福利网站| 久久99热精品| 亚洲国产精品一区二区久久hs| 久久国产综合精品五月天| 韩国免费A级毛片久久| 亚洲av成人无码久久精品| 亚洲国产成人精品无码久久久久久综合 | 99久久无码一区人妻a黑| 性高湖久久久久久久久AAAAA| 91精品国产91久久久久久蜜臀| 亚洲av日韩精品久久久久久a| 久久精品无码一区二区app| a高清免费毛片久久| 久久久亚洲欧洲日产国码二区| 人妻无码精品久久亚瑟影视| 久久精品成人免费国产片小草| 国产福利电影一区二区三区久久老子无码午夜伦不 | 狠狠精品干练久久久无码中文字幕 | 中文字幕无码免费久久| 日日狠狠久久偷偷色综合免费 | 欧美久久一区二区三区| 久久综合五月丁香久久激情| 久久精品免费网站网| 深夜久久AAAAA级毛片免费看| 欧美精品福利视频一区二区三区久久久精品 | 国产精品久久久久久久久免费| 国产一级持黄大片99久久| 亚洲精品高清国产一久久|