• <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>

            大龍的博客

            常用鏈接

            統(tǒng)計(jì)

            最新評(píng)論

            Oracle分組排序查詢

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

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


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



            插入一些測(cè)試數(shù)據(jù): 
            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查詢每個(gè)分組中amount最大的前兩條記錄 

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

            不使用子查詢語(yǔ)句為: (簡(jiǎn)單的分析函數(shù)的應(yīng)用, 分析函數(shù)還包括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  


            查詢的結(jié)果是: 
                 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 



            使用子查詢的語(yǔ)句為: 
            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  



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

            6 rows selected 


            兩種查詢各有優(yōu)缺點(diǎn): 
            不用子查詢的方法利用了Oracle自身的查詢方法,效率會(huì)高此,但是給移稙帶來(lái)不利影響 
            子查詢的優(yōu)點(diǎn)是可用于任何數(shù)據(jù)庫(kù),但是效率差些 

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


            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            中文字幕无码av激情不卡久久| 久久天天躁狠狠躁夜夜网站| 久久精品不卡| 久久亚洲国产成人精品无码区| 欧美亚洲国产精品久久高清| 国产三级久久久精品麻豆三级| 久久成人18免费网站| 免费久久人人爽人人爽av| 国产精品一区二区久久精品| 无码人妻久久一区二区三区蜜桃| 亚洲精品乱码久久久久久蜜桃图片 | 欧美噜噜久久久XXX| 国产三级精品久久| 亚洲午夜久久久久久久久电影网| 国产激情久久久久影院| 亚洲综合伊人久久大杳蕉| 精品久久久久久无码中文野结衣| 亚洲综合伊人久久大杳蕉| 久久久久亚洲精品无码网址 | 久久久久99精品成人片直播| 亚洲午夜无码久久久久小说| 老司机国内精品久久久久| 99精品国产综合久久久久五月天 | 精品国产综合区久久久久久 | 久久精品国产99国产精品导航| 狠狠干狠狠久久| 久久精品99久久香蕉国产色戒| 亚洲人成无码网站久久99热国产| 国内精品久久久久久久久| 色噜噜狠狠先锋影音久久| 精品久久久久久久| 99久久久精品| 999久久久免费精品国产| 久久综合狠狠综合久久| 无码超乳爆乳中文字幕久久 | 热re99久久精品国产99热| 久久影院综合精品| 国产精品久久久久国产A级| 精品久久久久久国产潘金莲| 亚洲av伊人久久综合密臀性色| 亚洲日本va中文字幕久久|