MySQL創建字段+數據處理函數+匯總數據(聚集函數)+分組數據_MySQL

  【0】readme 0.1)本文部分文字描述轉自“mysql 必知必會”,旨在review“mysql創建字段+數據處理函數+匯總數據(聚集函數)+分組數據” 的基礎知識;

  【1】創建計算字段 1)problem+solution

  1.1)problem:存儲在表中的數據都不是應用程序所需要的。我們需要直接從數據庫中檢索出轉換,計算或格式化過的數據; 1.2)solution:這就是計算字段發揮作用所在了, 計算字段是運行時在 select語句內創建的;

  2)字段定義:基本上與列的意思相同,經?;Q使用,不過數據庫列一般稱為列,而術語字段常用在計算字段的連接上; Attention)建議在數據庫服務器上完成對數據的轉換和格式化工作,因為相比于客戶機,數據庫服務器完成這些操作要快得多;

  3)拼接字段

  3.1)拼接:將值聯結到一起構成單個值(使用 concat() 函數來拼接兩個列);

  

MySQL創建字段+數據處理函數+匯總數據(聚集函數)+分組數據_MySQL

?

  3.2)刪除數據右側多余空格來整理數據: 這可以通過RTrim()函數來實現,(不區分大小寫,即rtrim()函數),當然也有ltrim() 函數 和 trim() 函數;

  

MySQL創建字段+數據處理函數+匯總數據(聚集函數)+分組數據_MySQL

?

  4)執行算術能力

  

MySQL創建字段+數據處理函數+匯總數據(聚集函數)+分組數據_MySQL

?

  Attention)MySQL中的now() 函數,返回當前日期和時間;

  

MySQL創建字段+數據處理函數+匯總數據(聚集函數)+分組數據_MySQL

?

  【2】使用數據處理函數 1)上一章中的 rtrim() + ltrim() + trim() 就是一個利用函數的荔枝; Attention)能運行在多個系統上的代碼稱為可移植性;相對來說,多數SQL語句是可移植的,但函數的移植性卻不強,幾乎每種DBMS 的實現都支持其他實現不支持的函數;為了代碼的可移植性,許多SQL 程序員不贊成使用特殊實現的功能;如果你決定使用函數,應該保證做好代碼注釋;(干貨——不建議在MySQL中使用函數,因為其函數的可移植性不高); 2)文本處理函數

  

MySQL創建字段+數據處理函數+匯總數據(聚集函數)+分組數據_MySQL

?

  

MySQL創建字段+數據處理函數+匯總數據(聚集函數)+分組數據_MySQL

?

  3)日期和時間處理函數

  

MySQL創建字段+數據處理函數+匯總數據(聚集函數)+分組數據_MySQL

?

  Attention)首先需要注意的是MySQL 使用的日期格式。無論你什么時候指定一個日期,不管是插入還是更新表值還是用where子句進行過濾,日期必須為格式 yyyy-mm-dd, 這是首選的日期格式,因為它排除了多義性(如 04/05/06 是 2006年5月4日還是2006年4月5日或2004年 5月6日呢?) problem+solution)

  

MySQL創建字段+數據處理函數+匯總數據(聚集函數)+分組數據_MySQL

?

  problem)如上圖所示,對于datetime 類型的 deal_time ,where deal_time=’2016-05-10′ 檢索失敗; solution)指示MySQL 僅將給出的日期與列中的日期部分進行比較,而不是將給出的日期和整個列值進行比較。為此,必須使用Date()函數;

  

MySQL創建字段+數據處理函數+匯總數據(聚集函數)+分組數據_MySQL

?

  Attention)date() 函數 和 time()函數都是在 MySQL4.1.1引入的;

  

MySQL創建字段+數據處理函數+匯總數據(聚集函數)+分組數據_MySQL

?

  4)還有一種日期需要比較。如,想要檢索出 2005年9月下的所有訂單,怎么辦?(between … and … 語句)

  

MySQL創建字段+數據處理函數+匯總數據(聚集函數)+分組數據_MySQL

?

  

MySQL創建字段+數據處理函數+匯總數據(聚集函數)+分組數據_MySQL

?

  5)數值處理函數

  

MySQL創建字段+數據處理函數+匯總數據(聚集函數)+分組數據_MySQL

?

  【3】匯總數據 1)聚集函數:如確定表中行數;獲得表中行組的和;找出表列的最大值,最小值和平均值;

  1.1)聚集函數定義:運行在行組上, 計算和返回單個值的函數;

  

MySQL創建字段+數據處理函數+匯總數據(聚集函數)+分組數據_MySQL

?

  1.2)avg()函數

  

MySQL創建字段+數據處理函數+匯總數據(聚集函數)+分組數據_MySQL

?

  Attention)NULL值:avg() 函數忽略列值為null 的行;

  1.3)count() 函數 的兩種用法

  func1)使用count(*)對表中行的數目進行計數,不管表列中包含的是空值(NULL)還是非空值;

  func2)使用count(column)對特定列中具有值的進行計數,忽略NULL 值;

  

MySQL創建字段+數據處理函數+匯總數據(聚集函數)+分組數據_MySQL

?

  1.4)max() 函數 和 min() 函數 + sum()函數

  

MySQL創建字段+數據處理函數+匯總數據(聚集函數)+分組數據_MySQL

?

  2)聚集不同值:以上5個聚集函數都可以如下使用:

  2.1)對所有的行執行計算,指定all 參數或不給參數(因為all 是默認行為); 2.2)只包含不同的值,指定distinct 參數;

  看個荔枝)考慮各個不同的price(distinct==不同的)

  

MySQL創建字段+數據處理函數+匯總數據(聚集函數)+分組數據_MySQL

?

  3)組合聚集函數

  

MySQL創建字段+數據處理函數+匯總數據(聚集函數)+分組數據_MySQL

?

  【4】分組數據(group by 和 having 子句) 1)數據分組:統計每個供應商提供的產生數量; 2)創建分組:分組是在select 語句中通過 group by 子句創建的;

  

MySQL創建字段+數據處理函數+匯總數據(聚集函數)+分組數據_MySQL

?

  3)在具體使用 group by 子句前,需要知道一些重要的規定(rules)

  r1)group by 子句可以包含任意數目的列,這使得對分組可以嵌套,為數據分組提供更細致的控制(也即 group by column1, column2==先按照column1進行分組,再按照column2進行分組); r2)如果在group by 子句中嵌套了分組,數據將在最后規定的分組上進行匯總。換句話說,在建立分組時,指定的所有列都一起計算; r3)group by子句中列出的每個列都必須是檢索列或有效的表達式。如果在select中使用表達式,則必須在group by子句中指定相同的表達式,不能使用別名; r4)初開聚集計算語句外,select語句中的每個列都必須在 group by 子句中給出;(干貨規定) r5)如果分組列中具有null 值, 則null 值將作為一個分組返回。 如果列中有多行NULL 值,它們將分為一組; r6)group by 子句必須出現在 where 子句之后,order by 子句之前;(干貨——group by 子句在 where子句和order by 子句的位置)

  Attention)使用rollup:使用with rollup 關鍵字,可以得到每個分組以及每個分組匯總級別(針對每個分組)的值;

  4)過濾分組

  4.1)過濾分組使用 having子句進行處理; 4.2)where子句和having子句的區別(Difference):

  D1)where過濾行,而having 過濾列;

  D2)where 在數據分組前進行過濾,而having在數據分組后進行過濾;(干貨——這是where 和having一個重要的區別)

  

MySQL創建字段+數據處理函數+匯總數據(聚集函數)+分組數據_MySQL

?

  Attention)having子句的位置:having子句過濾是基于group by的,它在group by子句的后面 ; 看個荔枝)證明where 在數據分組前進行過濾,而having在數據分組后進行過濾;(干貨——這是where 和having一個重要的區別)

  

MySQL創建字段+數據處理函數+匯總數據(聚集函數)+分組數據_MySQL

?

  5)分組和排序(group by 和 order by)

  5.1)group by 和 order by的不同

  

MySQL創建字段+數據處理函數+匯總數據(聚集函數)+分組數據_MySQL

?

  5.2)不要忘記group by:一般在使用 group by 子句時,應該也給出order by子句。這是保證數據正確排序的唯一方法;

  

MySQL創建字段+數據處理函數+匯總數據(聚集函數)+分組數據_MySQL

?

  6)select 子句的順序

  

MySQL創建字段+數據處理函數+匯總數據(聚集函數)+分組數據_MySQL

?

  

MySQL創建字段+數據處理函數+匯總數據(聚集函數)+分組數據_MySQL

?

? 版權聲明
THE END
喜歡就支持一下吧
點贊14 分享