MySQL建立欄位+資料處理函數+摘要資料(聚集合函式)+分組資料

來源:互聯網
上載者:User

標籤:

【0】README 0.1)本文部分文字描述轉自“MySQL 必知必會”,旨在review “MySQL建立欄位+資料處理函數+摘要資料(聚集合函式)+分組資料” 的基礎知識;
【1】建立計算欄位 1)problem+solution
1.1)problem:儲存在表中的資料都不是應用程式所需要的。我們需要直接從資料庫中檢索出轉換,計算或格式化過的資料; 1.2)solution:這就是計算欄位發揮作用所在了, 計算欄位是運行時在 select語句內建立的;
2)欄位定義:基本上與列的意思相同,經常互換使用,不過資料庫列一般稱為列,而術語欄位常用在計算欄位的串連上; Attention)建議在資料庫伺服器上完成對資料的轉換和格式化工作,因為相比於客戶機,資料庫伺服器完成這些操作要快得多;
3)拼接欄位
3.1)拼接:將值連接到一起構成單個值(使用 concat() 函數來拼接兩個列);
3.2)刪除資料右側多餘空格來整理資料: 這可以通過RTrim()函數來實現,(不區分大小寫,即rtrim()函數),當然也有ltrim() 函數 和 trim() 函數;
4)執行算術能力
Attention)MySQL中的now() 函數,返回當前日期和時間;
【2】使用資料處理函數 1)上一章中的 rtrim() + ltrim() + trim() 就是一個利用函數的荔枝; Attention)能運行在多個系統上的代碼稱為可移植性;相對來說,多數SQL語句是可移植的,但函數的移植性卻不強,幾乎每種DBMS 的實現都支援其他實現不支援的函數;為了代碼的可移植性,許多SQL 程式員不贊成使用特殊實現的功能;如果你決定使用函數,應該保證做好代碼注釋;(乾貨——不建議在MySQL中使用函數,因為其函數的可移植性不高); 2)文本處理函數

3)日期和時間處理函數
Attention)首先需要注意的是MySQL 使用的日期格式。無論你什麼時候指定一個日期,不管是插入還是更新表值還是用where子句進行過濾,日期必須為格式 yyyy-mm-dd, 這是首選的日期格式,因為它排除了多義性(如 04/05/06 是 2006年5月4日還是2006年4月5日或2004年 5月6日呢?)problem+solution)
problem)如所示,對於datetime 類型的 deal_time ,where deal_time=‘2016-05-10‘ 檢索失敗; solution)指示MySQL 僅將給出的日期與列中的日期部分進行比較,而不是將給出的日期和整個列值進行比較。為此,必須使用Date()函數;
Attention)date() 函數 和 time()函數都是在 MySQL4.1.1引入的;
4)還有一種日期需要比較。如,想要檢索出 2005年9月下的所有訂單,怎麼辦?(between ... and ... 語句)

5)數值處理函數
【3】摘要資料 1)聚集合函式:如確定表中行數;獲得表中行組的和;找出表列的最大值,最小值和平均值;
1.1)聚集合函式定義:運行在行組上, 計算和返回單個值的函數;
1.2)avg()函數
Attention)NULL值:avg() 函數忽略列值為null 的行;
1.3)count() 函數 的兩種用法
func1)使用count(*)對錶中行的數目進行計數,不管表列中包含的是空值(NULL)還是非空值;
func2)使用count(column)對特定列中具有值的進行計數,忽略NULL 值;
1.4)max() 函數 和 min() 函數 + sum()函數
2)聚集不同值:以上5個聚集合函式都可以如下使用:
2.1)對所有的行執行計算,指定all 參數或不給參數(因為all 是預設行為); 2.2)只包含不同的值,指定distinct 參數;
看個荔枝)考慮各個不同的price(distinct==不同的)
3)組合聚集合函式

【4】分組資料(group by  和 having 子句) 1)資料分組:統計每個供應商提供的產生數量; 2)建立分組:分組是在select 語句中通過 group by 子句建立的;
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一個重要的區別)
Attention)having子句的位置:having子句過濾是基於group by的,它在group by子句的後面 ; 看個荔枝)證明where 在資料分組前進行過濾,而having在資料分組後進行過濾; (乾貨——這是where 和having一個重要的區別)
5)分組和排序(group by 和 order by)
5.1)group by 和 order by的不同
5.2)不要忘記group by:一般在使用 group by 子句時,應該也給出order by子句。這是保證資料正確排序的唯一方法;
6)select 子句的順序

MySQL建立欄位+資料處理函數+摘要資料(聚集合函式)+分組資料

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.