<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    小菜毛毛技術分享

    與大家共同成長

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      164 Posts :: 141 Stories :: 94 Comments :: 0 Trackbacks

    Oracle_學習使用SQL語五(統計分組語句)

       在應用系統開發中,進行需要統計數據庫中的數據,當執行數據統計時,需要將表中的數據進行分組顯示,在統計分組中是通過group by子句、分組函數、having子句共同實現的。其中group by子句用于指定要分組的列,而分組函數用戶指定顯示統計的結果,而having子句用戶限制顯示分組結果。
       一、分組函數
       分組函數用于統計表的數據,并作用于多行,但是返回一個結果,一般情況下,分組函數要與group by子句結合使用,Oracle數據庫提供了大量的分組函數,常用的五個分組函數:
    Oracle代碼 復制代碼
    1. Max:該函數用于取得列或表達式的最大值,適用于任何數據類型。   
    2. Min:該函數用于取得列或表達式的最小值,適用于任何數據類型。   
    3. Avg:該函數用于取得列或表達式的平均值,適用于數字類型。   
    4. Sum:該函數用于取得列或表達式的總和,  適用于數字類型。   
    5. Count:該函數用于取的行數總和。  


    注意:
    1、當使用分組函數時,分組函數只能出現在選擇列表、order by和having子句中,而不能出現在where、group by子句中。
    2、當使用分組函數時,除了函數count(*)外,其他分組函數都會忽略NULL行。
    3、當執行select語句時,如果選擇列表同時包括列、表達式和分組函數,那么這些列、表達式必須出現在group by子句中。
    4、當使用分組函數時,在分組函數中可以指定all和distinct選項,其中all是默認選項,該選項表示統計所有行數據(包括重復行),distinc可以統計不同行數據。

    示例如下:
    1、取得某列最小值、最大值、平均值、總和和總計行數
    Oracle代碼 復制代碼
    1. select max(id) as max_id,min(id) as min_id,avg(id) as avg_id,sum(id) as sum_id,count(*) as count from cip_temps;  

    2、去除重復值
    Oracle代碼 復制代碼
    1. select count(distinct id) from cip_temps;  

    二、group by和having子句
       group by子句是對統計的結果進行分組統計,而having子句用于限制分組顯示結果,語法如下:
    select column,group_function from table [where condition][group by group_by_experssion][having group_function];如上所示,column用于指定列表中的列或表達式,group_function用于指定分組函數,condition用于指定條件子句,group_by_experssion用于指定分組表達式,group_function用于指定排除分組結果條件。
    1、使用group by進行單列分組,如下:
    Oracle代碼 復制代碼
    1. select id as id,min(age) max_age,max(age) max_age from cip_temps group by id;  

    2、使用having子句限制分組顯示結果,如下:
    Oracle代碼 復制代碼
    1. select id as id,count(age) count from cip_temps group by id having count(age)=2;  

    三、case表達式
    case格式如下:
    Oracle代碼 復制代碼
    1. case when 條件 then 返回值1 when 條件2 then 返回值2 else 返回值3 end  

    示例如下:
    select name,age,address,case when id=21 then 'abc' when id=22 then 'def' else 'hij' end alias from cip_temps;
    四、Oracle常用統計函數
    1、數字函數
      (1)、mod(m,n)該函數用于返回取得兩個數字相除后的余數,如果數字為0,則返回結果為m。
      (2)、round(n,[m]該函數用于取得四舍五入運算,如果省略m,則四舍五入至整數位;如果m是負數,則四舍五入到小數點前m位;如果m是正數,則四舍五入到小數點后m位。
      (3)、trunc(n,[m])該函數用于截取數字,如果省略m,則將數字n的小數部門截取;如果m為正數,則將數字n截取至小數點后的第m位,如果m為負數,則將數字n截取小數點的前m為。
    示例如下:
    Oracle代碼 復制代碼
    1. select mod(10,4) from dual;   
    2. select round(101234.567,-4) from dual;   
    3. select round(101.234567,4) from dual;   
    4. select trunc(101234.457,2) from dual;   
    5. select trunc(101234.457,-2) from dual;  

    2、日期函數
       (1)、round(d,[fmt])該函數用于返回日期時間的四舍五入結果,如果fmt指定年度,則7月1日為分割線;如果fmt指定月,則16日為分割線;如果fmt指定為天,則中午12:00為分割線。
       (2)、trunc(d,[fmt])該函數用于截取日期時間數據,如果fmt指定年度,則結果為本年度的1月1日,如果fmt指定月,則結果為本月1日。
    示例如下:
    Oracle代碼 復制代碼
    1. select round(sysdate,'yyyy') from dual;   
    2. select round(sysdate,'mm') from dual;   
    3. select round(sysdate,'dd') from dual;   
    4. select trunc(sysdate,'yyyy') from dual;   
    5. select trunc(sysdate,'mm') from dual;   
    6. select trunc(sysdate,'dd') from dual;  

      3、轉換函數
        (1)、to_char(date,fmt)該函數用于將日期類型轉換為字符串類型,其中fmt用于指定日期格式。
        (2)、to_date(char,fmt)該函數用于將符合特定日期格式的字符串轉變為date類型的值。
        (3)、to_number(char)該函數用于將符合特定數字格式的字符串轉換為數字類型。
    示例如下:
    Oracle代碼 復制代碼
    1. select to_date('2009-3-1','yyyy-mm-dd') from dual;   
    2. select to_char(sysdate,'YYYY-MM-DD HH24:MI:SS') from dual;   
    3. select to_number('10.123') from dual;  

    4、其他單行函數
        (1)、decode(expr,search1,result1[,search2,result2,...],default)該函數用于返回匹配于特定表達式結果,如果search1匹配與expr,則返回結果result1,如果search2匹配expr,則返回結果result2,以此類推,如果沒有任何匹配關系,則返回默認default。
    示例如下:
    Oracle代碼 復制代碼
    1. select name,decode(age,'bb21',id*10,'bb22',id*20,1000) as decodee from cip_temps;  

    注意:decode函數和case表達式的用法基本相似,但是case表達式可以多個條件進行判斷,從而返回結果。
    示例如下:
    Oracle代碼 復制代碼
    1. select name,case when (   
    2.              (age='bb21' and address='cc21')    
    3.              or (age='bb22' and address='cc22')    
    4.              or (age='bb23' and address='cc23')    
    5.            ) then 1 else 0 end as cases from cip_temps  
    posted on 2009-08-20 20:30 小菜毛毛 閱讀(1570) 評論(0)  編輯  收藏 所屬分類: 數據庫
    主站蜘蛛池模板: 免费观看一区二区三区| 无码人妻一区二区三区免费手机| 亚洲韩国—中文字幕| 久久久久久久免费视频| 一区二区三区免费视频网站| 久久久婷婷五月亚洲97号色 | 国产情侣久久久久aⅴ免费| 亚洲丰满熟女一区二区v| 亚洲精品偷拍视频免费观看 | 亚洲欧美aⅴ在线资源| 综合久久久久久中文字幕亚洲国产国产综合一区首 | 免费可以看黄的视频s色| 一个人免费播放在线视频看片| 中文字幕在线观看亚洲| jizzjizz亚洲| 在线观看日本免费a∨视频| 91免费国产视频| 亚洲国产成人手机在线观看| 亚洲国产精品国自产拍AV| 国产精品免费视频一区| 国产2021精品视频免费播放| 成人免费无码H在线观看不卡| 亚洲中文字幕AV每天更新| 亚洲日韩图片专区第1页| 免费中文字幕在线| 九九九精品成人免费视频| 日韩午夜理论免费TV影院| 精品女同一区二区三区免费播放| 亚洲成av人片在线看片| 亚洲午夜福利在线观看| 国产一区二区三区免费看| 无码国产精品一区二区免费| 嫩草在线视频www免费观看| 美女被吸屁股免费网站| 亚洲熟妇少妇任你躁在线观看| 亚洲av无码一区二区三区乱子伦| 亚洲精品国产电影| 日产乱码一卡二卡三免费| 免费一本色道久久一区| 在线看片免费人成视久网| 国产免费拔擦拔擦8X高清在线人|