1. 程式人生 > >SQL函式(一) --- Aggregate

SQL函式(一) --- Aggregate

SQL Aggregate 函式計算從列中取得的值,返回一個單一的值。

AVG() 函式

AVG() 函式返回數值列的平均值。

SQL AVG() 語法

SELECT AVG(column_name) FROM table_name

SQL COUNT() 函式

COUNT() 函式返回匹配指定條件的行數。

SQL COUNT(column_name) 語法
COUNT(column_name) 函式返回指定列的值的數目(NULL 不計入):

SELECT COUNT(column_name) FROM table_name;

SQL COUNT(*) 語法


COUNT(*) 函式返回表中的記錄數:

SELECT COUNT(*) FROM table_name;

SQL COUNT(DISTINCT column_name) 語法
COUNT(DISTINCT column_name) 函式返回指定列的不同值的數目:

SELECT COUNT(DISTINCT column_name) FROM table_name;

註釋:COUNT(DISTINCT) 適用於 ORACLE 和 Microsoft SQL Server,但是無法用於 Microsoft Access。

SQL FIRST() 函式

FIRST() 函式返回指定的列中第一個記錄的值。

SQL FIRST() 語法

SELECT FIRST(column_name) FROM table_name;

註釋:只有 MS Access 支援 FIRST() 函式。

SQL Server 語法

SELECT TOP 1 column_name FROM table_name
ORDER BY column_name ASC;

例項

SELECT TOP 1 name FROM Websites
ORDER BY id ASC;

MySQL 語法

SELECT column_name FROM table_name
ORDER BY column_name ASC
LIMIT 1;

例項

SELECT name FROM Websites
ORDER BY id ASC
LIMIT 1;

Oracle 語法

SELECT column_name FROM table_name
ORDER BY column_name ASC
WHERE ROWNUM <=1;

例項

SELECT name FROM Websites
ORDER BY id ASC
WHERE ROWNUM <=1;

SQL LAST() 函式

LAST() 函式返回指定的列中最後一個記錄的值。

SQL LAST() 語法

SELECT LAST(column_name) FROM table_name;

註釋:只有 MS Access 支援 LAST() 函式。

SQL Server 語法

SELECT TOP 1 column_name FROM table_name
ORDER BY column_name DESC;

例項

SELECT TOP 1 name FROM Websites 
ORDER BY id DESC;

MySQL 語法

SELECT column_name FROM table_name
ORDER BY column_name DESC
LIMIT 1;

例項

SELECT name FROM Websites
ORDER BY id DESC
LIMIT 1;

Oracle 語法

SELECT column_name FROM table_name
ORDER BY column_name DESC
WHERE ROWNUM <=1;

例項

SELECT name FROM Websites
ORDER BY id DESC
WHERE ROWNUM <=1;

SQL MAX() 函式

MAX() 函式返回指定列的最大值。

SQL MAX() 語法

SELECT MAX(column_name) FROM table_name;

SQL MIN() Function

MIN() 函式返回指定列的最小值。

SQL MIN() 語法

SELECT MIN(column_name) FROM table_name;

SQL SUM() 函式

SUM() 函式返回數值列的總數。

SQL SUM() 語法

SELECT SUM(column_name) FROM table_name;

SQL GROUP BY 語句

GROUP BY 語句可結合一些聚合函式來使用

GROUP BY 語句
GROUP BY 語句用於結合聚合函式,根據一個或多個列對結果集進行分組。

SQL GROUP BY 語法

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;

演示資料庫:
下面是選自 “Websites” 表的資料:

+----+--------------+---------------------------+-------+---------+
| id | name         | url                       | alexa | country |
+----+--------------+---------------------------+-------+---------+
| 1  | Google       | https://www.google.cm/    | 1     | USA     |
| 2  | 淘寶          | https://www.taobao.com/   | 13    | CN      |
| 3  | 菜鳥教程      | http://www.runoob.com/    | 4689  | CN      |
| 4  | 微博          | http://weibo.com/         | 20    | CN      |
| 5  | Facebook     | https://www.facebook.com/ | 3     | USA     |
| 7  | stackoverflow | http://stackoverflow.com/ |   0 | IND     |
+----+---------------+---------------------------+-------+---------+

下面是 “access_log” 網站訪問記錄表的資料:

+-----+---------+-------+------------+
| aid | site_id | count | date       |
+-----+---------+-------+------------+
|   1 |       1 |    45 | 2016-05-10 |
|   2 |       3 |   100 | 2016-05-13 |
|   3 |       1 |   230 | 2016-05-14 |
|   4 |       2 |    10 | 2016-05-14 |
|   5 |       5 |   205 | 2016-05-14 |
|   6 |       4 |    13 | 2016-05-15 |
|   7 |       3 |   220 | 2016-05-15 |
|   8 |       5 |   545 | 2016-05-16 |
|   9 |       3 |   201 | 2016-05-17 |
+-----+---------+-------+------------+

GROUP BY 簡單應用
統計 access_log 各個 site_id 的訪問量:
例項

SELECT site_id, SUM(access_log.count) AS nums
FROM access_log GROUP BY site_id;

執行以上 SQL 輸出結果如下:

這裡寫圖片描述

SQL GROUP BY 多表連線

現在我們想要查詢每個送貨員配送的訂單數目。
下面的 SQL 語句統計所有網站的訪問的記錄數:

例項

SELECT Websites.name,COUNT(access_log.aid) AS nums FROM access_log
LEFT JOIN Websites
ON access_log.site_id=Websites.id
GROUP BY Websites.name;

執行以上 SQL 輸出結果如下:

這裡寫圖片描述

SQL HAVING 子句

在 SQL 中增加 HAVING 子句原因是,WHERE 關鍵字無法與聚合函式一起使用。
HAVING 子句可以讓我們篩選分組後的各組資料。

SQL HAVING 語法

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name) operator value;

演示資料庫
在本教程中,我們將使用 RUNOOB 樣本資料庫。
下面是選自 “Websites” 表的資料:

+----+--------------+---------------------------+-------+---------+
| id | name         | url                       | alexa | country |
+----+--------------+---------------------------+-------+---------+
| 1  | Google       | https://www.google.cm/    | 1     | USA     |
| 2  | 淘寶          | https://www.taobao.com/   | 13    | CN      |
| 3  | 菜鳥教程      | http://www.runoob.com/    | 4689  | CN      |
| 4  | 微博          | http://weibo.com/         | 20    | CN      |
| 5  | Facebook     | https://www.facebook.com/ | 3     | USA     |
| 7  | stackoverflow | http://stackoverflow.com/ |   0 | IND     |
+----+---------------+---------------------------+-------+---------+

下面是 “access_log” 網站訪問記錄表的資料:


+-----+---------+-------+------------+
| aid | site_id | count | date       |
+-----+---------+-------+------------+
|   1 |       1 |    45 | 2016-05-10 |
|   2 |       3 |   100 | 2016-05-13 |
|   3 |       1 |   230 | 2016-05-14 |
|   4 |       2 |    10 | 2016-05-14 |
|   5 |       5 |   205 | 2016-05-14 |
|   6 |       4 |    13 | 2016-05-15 |
|   7 |       3 |   220 | 2016-05-15 |
|   8 |       5 |   545 | 2016-05-16 |
|   9 |       3 |   201 | 2016-05-17 |
+-----+---------+-------+------------+

SQL HAVING 例項
現在我們想要查詢總訪問量大於 200 的網站。
我們使用下面的 SQL 語句:

SELECT Websites.name, Websites.url, SUM(access_log.count) AS nums FROM (access_log
INNER JOIN Websites
ON access_log.site_id=Websites.id)
GROUP BY Websites.name
HAVING SUM(access_log.count) > 200;

執行以上 SQL 輸出結果如下:
這裡寫圖片描述

現在我們想要查詢總訪問量大於 200 的網站,並且 alexa 排名小於 200。
我們在 SQL 語句中增加一個普通的 WHERE 子句:

SELECT Websites.name, SUM(access_log.count) AS nums FROM Websites
INNER JOIN access_log
ON Websites.id=access_log.site_id
WHERE Websites.alexa < 200 
GROUP BY Websites.name
HAVING SUM(access_log.count) > 200;

執行以上 SQL 輸出結果如下:

這裡寫圖片描述

相關推薦

SQL函式() --- Aggregate

SQL Aggregate 函式計算從列中取得的值,返回一個單一的值。 AVG() 函式 AVG() 函式返回數值列的平均值。 SQL AVG() 語法 SELECT AVG(column_name) FROM table_name SQ

SQL函式模組

學習了SQL的一些基礎內容之後,今天開始學習SQL的函式,繼續加油 SQL 擁有很多可用於計數和計算的內建函式: Aggregate 函式:計算從列中取得的值,返回一個單一的值 有用一些 Aggregate 函式: AVG() - 返回平均值 select a

[Oracle]高效的SQL語句之分析函式()--sum()

select deptno,       ename,       sal,  --按照部門薪水累加(order by改變了分析函式的作用,只工作在當前行和前一行,而不是所有行)sum(sal) over (partition by deptno orderby sal) CumDeptTot,       

Mongodb()aggregate聚合函式的用法

#命令列操作 db.book_info.aggregate({"$match":{"ObjectType":"3","Language":"0","EndTime":{"$gt":時間}}},{"$so

sql列拆成兩列

一個 har arc name reat sql table -1 中一 declare @table table (name nvarchar(4))insert into @tableselect ‘張三‘ union allselect ‘李四‘ union alls

常用SQL優化(),提升運算效率

大數據 必須 -name 過大 一半 一次 存儲過程 是否 ins 網上關於SQL優化的教程很多,但是比較雜亂。近日有空整理了一下,寫出來跟大家分享一下,其中有錯誤和不足的地方,還請大家糾正補充。1.對查詢進行優化,應盡量避免全表掃描,首先應考慮在 where 及 orde

SQL強化()保險業務

card row sta 每次 數據 編號 int ext 替代 保險業務 : 表結構 : sql語句 : /*1. 根據投保人電話查詢出投保人 姓名 身份證號 所有保單 編號 險種 繳費類型*/SELECTt2.cust_name,t2.idcard,t4.pro

SQL交換列中數據的值(如男女性別)

have set iat table p s 題目 highlight running 女性 在刷LeetCode的時候遇到的SQL題目 627. Swap Salary Given a table salary, such as the one below, tha

【隨記】SQL備份張表的數據

create 數據備份 無需 oracl 默認 備份 int 自動生成 span SQL Server: SELECT * INTO table_bak FROM table 可把表table中的數據備份到 table_bak ,而且無需重新建table

SQL挑戰 : 查找最晚入職員工的所有信息

varchar int asc limit char 數據庫表 desc esc har 以上數據庫表:   CREATE TABLE `employees` (  `emp_no` int(11) NOT NULL,  `birth_date` date NOT NULL

SQL條記錄中多個字段的值拼接為一個字段 && 將多行數據合並成一行,並且拼接CONVERT() 、for xml path的使用

varchar start 技術分享 現在 date rom 結果 技術 ont 接著上篇文章的訂單表(商品編號,價格設置時間id(類似於創建時間,創建時間約早,則act_id越小) ,價格的時間段,商品價格) 一、將一條記錄中多個字段的值拼接為一個字段 現要求將兩個時間

MySQL內核源碼解讀-SQL解析

ava 協議 存在 fc7 mysql數據庫 查詢執行流程 ilog error follow 本文是基於MySQL5.7.22進行分析1. SQL總體執行流程圖通過上面圖,可以從全局上了解SQL語句執行流程以及與其他模塊交互 1.1 SQL查詢執行流程 2.

量化交易入門筆記-資料獲取函式

history()函式 history()獲取歷史資料,可查詢多個標的單個數據欄位,返回資料格式為 DataFrame 或 Dict(字典),其語法格式如下: history(count, unit='1d', field='avg',

SQL筆記()

本文章為系列文章,是學習《SLQ必知必會》(Ben Forta 著 人民郵電出版社出版)一書的筆記,因此文中大量引用了原書內容, 所以推薦想系統學習的同學閱讀原書。同時本文所涉及的相關知識及內容版權由《SLQ必知必會》(Ben Forta 著 人民郵電出版社出版)作者所有,如涉及

高等數學-函式

集合相關概念 集合 元素 有限集,無限集 集合的元素 數集 -N,Z,Q-,R-Real 子集 集合相等 空集 區間,開區間,閉區間,半開區間 無限區間 |a+b|<=|a|+|b| |a.b|<=|a|.|b| |a/b| =|a|/|b|

python初識之內建函式

  python的內建函式一共有68個,這裡先學習55個 作用域相關:locals()和globals()   locals() 返回本地作用域中的所有名字   globals() 返回全域性作用域中的所有名字 迭代器生成器相關:range() 、iter()、next()   range() 可迭

day013內建函式

一、內建函式一 [內建函式思維導圖連結] (https://www.processon.com/view/link/5bdc5328e4b0844e0bc6c846) 內建函式就是python提供的,拿來直接用的,如print,input等等 1.作用域相關的 locals

sql優化()

---title: sql語句的優化(一)date: 2018-10-20categories: 資料庫優化--- # Explain 命令 資料庫查詢效率的快慢往往是評價一個數據庫是好是差其中的一個標準。 對於好的資料庫而言,往往離不開良好的資料庫設計,硬體配置,網路等諸多因數。 那麼我們在日常開發

SQL-函式

一:函式 1、left(str,INDEX) 從左邊第index開始擷取 2、right(str,INDEX)從右邊第index開始擷取 3、substring(str,INDEX)當index>0從左邊開始擷取直到結束 當index<0從右邊開始擷取直到結束 當index=0返回空 4、

Python小白學習之路(十六)—【內建函式

將68個內建函式按照其功能分為了10類,分別是: 數學運算(7個) abs()    divmod()    max()    min()    pow()    round()    sum() 型別