MYSQL單表查詢

來源:互聯網
上載者:User

標籤:字串類型   指定   bsp   使用字串   執行   group by   欄位   部門   style   

彙總函式

  彙總:  將分散的聚集到一起.
  彙總函式: 對列進行操作,返回的結果是一個單一的值,除了 COUNT 以外,都會忽略空值

  COUNT:統計指定列不為NULL的記錄行數;
  SUM:計算指定列的數值和,如果指定列類型不是數實值型別,那麼計算結果為0;
  MAX:計算指定列的最大值,如果指定列是字串類型,那麼使用字串排序運算;
  MIN:計算指定列的最小值,如果指定列是字串類型,那麼使用字串排序運算;
  AVG:計算指定列的平均值,如果指定列類型不是數實值型別,那麼計算結果為0;

select 彙總函式 from 表名;

例如:
select avg(age),min(age),max(age),sum(age),count(age)from person #統計人員的平均年齡,最小年齡,最大年齡,總年齡,不為空白的行數

分組

分組的含義: 將一些具有相同特徵的資料 進行歸類.比如:性別,部門,崗位等等

 怎麼區分什麼時候需要分組呢?  

 

  特徵: 遇到 "每" 字,一般需要進行分組操作.

 

  例如: 1. 公司每個部門有多少人.

 

      2. 公司中有 多少男員工 和 多少女員工.

 

#分組查詢格式:select 被分組的欄位 from 表名 group by 分組欄位 [having 條件欄位]ps: 分組查詢可以與 彙總函式 組合使用.#查詢班級的平均年齡select avg(age),name from tb  GROUP BY class;#查詢每個部門的平均薪資 並且看看這個部門的員工都有誰?select avg(salary),dept,GROUP_CONCAT(name) from tb1 GROUP BY dept;#GROUP_CONCAT(expr):按照分組,將expr字串按逗號分隔,組合起來#查詢平均薪資大於10000的部門, 並且看看這個部門的員工都有誰?  select avg(salary),dept,GROUP_CONCAT(name) from person GROUP BY dept; having avg(salary)>10000;     #這裡的having後面跟條件與where相似,但也有不同

 where 與 having區別:
#執行優先順序從高到低:where > group by > having
#1. Where 發生在分組group by之前,因而Where中可以有任意欄位,但是絕對不能使用彙總函式。
#2. Having發生在分組group by之後,因而Having中可以使用分組的欄位,無法直接取到其他欄位,可以使用彙總函式

 

 

分頁查詢 

 

關鍵字 limit   
limit (起始條數),(查詢多少條數),如果limit後只有一個數字,則代表 0,(查詢多少條數)

#查詢前5條資料select * from person limit 3; #查詢第3條到第3條資料select * from person limit 3,6;

 

SQL 陳述式關鍵字的執行順序

1、查詢中常用到的關鍵詞有:

SELECT、FROM、WHERE、GROUP BY、HAVING、ORDER BY

其中,SELECT與FROM是必需的,其他關鍵詞則是可選的。

標準的 SQL 的解析順序為:   FROM->WHERE->GROUP BY->HAVING->SELECT->ORDER BY
  (1).FROM 欄位語句, 組裝來自不同資料來源的資料
  (2).WHERE 表名, 基於指定的條件對記錄進行篩選
  (3).GROUP BY 分組欄位列表, 將資料劃分為多個分組
  (4).使用彙總函式進行計算
  (5).使用 HAVING 子句篩選分組
  (6).計算所有的運算式
  (7).使用 ORDER BY 對結果集進行排序 ASC(升序,預設)、DESC(降序)

例如:

在學產生績表中,把班級為1班的學產生績按照學生姓名分組,並且篩選分組結果,匯總計算各個學生的總成績,選出總成績大於600分的學生列表,並按照總分從高到低排列。

Python代碼

select sum(score)as s,name from tb1
where class_id=1 group by namehaving s
>600
order by 2 asc

在上面的樣本中SQL語句的執行順序如下:

①首先執行FROM子句,從tb1表檢索記錄;

②執行WHERE子句,篩選出tb1表中class_id=1的所有記錄;

③執行GROUP BY子句,把tb1表按name列進行分組;

④計算SUM()聚集合函式,求出每個name的score之和;

⑤執行HAVING子句,篩選出sum(score)大於600的分組;

⑥提取name,sum(score)兩個欄位,產生新的結果集;

⑦執行ORDER BY子句,把⑥的結果集按sum(score)欄位升序排列。

 

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.