聚合函數(shù)
數(shù)據(jù)準(zhǔn)備
-- 創(chuàng)建數(shù)據(jù)庫(kù)
DROP DATABASE IF EXISTS mydb;
CREATE DATABASE mydb;
USE mydb;
-- 創(chuàng)建student表
CREATE TABLE student (
sid CHAR(6),
sname VARCHAR(50),
age INT,
gender VARCHAR(50) DEFAULT 'male'
);
-- 向student表插入數(shù)據(jù)
INSERT INTO student (sid,sname,age,gender) VALUES ('S_1001', 'lili', 14, 'male');
INSERT INTO student (sid,sname,age,gender) VALUES ('S_1002', 'wang', 15, 'female');
INSERT INTO student (sid,sname,age,gender) VALUES ('S_1003', 'tywd', 16, 'male');
INSERT INTO student (sid,sname,age,gender) VALUES ('S_1004', 'hfgs', 17, 'female');
INSERT INTO student (sid,sname,age,gender) VALUES ('S_1005', 'qwer', 18, 'male');
INSERT INTO student (sid,sname,age,gender) VALUES ('S_1006', 'zxsd', 19, 'female');
INSERT INTO student (sid,sname,age,gender) VALUES ('S_1007', 'hjop', 16, 'male');
INSERT INTO student (sid,sname,age,gender) VALUES ('S_1008', 'tyop', 15, 'female');
INSERT INTO student (sid,sname,age,gender) VALUES ('S_1009', 'nhmk', 13, 'male');
INSERT INTO student (sid,sname,age,gender) VALUES ('S_1010', 'xdfv', 17, 'female');
所謂聚合,就是將多行匯總成一行;其實(shí),所有的聚合函數(shù)均如此——輸入多行,輸出一行。聚合函數(shù)具有自動(dòng)濾空的功能,若某一個(gè)值為NULL,那么會(huì)自動(dòng)將其過(guò)濾使其不參與運(yùn)算。
Count()
統(tǒng)計(jì)表中數(shù)據(jù)的行數(shù)或者統(tǒng)計(jì)指定列其值不為NULL的數(shù)據(jù)個(gè)數(shù)
-
示例文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-486695.html
select count(*) from student;
Max()
計(jì)算指定列的最大值,如果指定列是字符串類型則使用字符串排序運(yùn)算
-
示例
select max(age) from student;
Min()
計(jì)算指定列的最小值,如果指定列是字符串類型則使用字符串排序運(yùn)算
-
示例
SELECT MIN(age) FROM student;
Sum()
計(jì)算指定列的數(shù)值和,如果指定列類型不是數(shù)值類型則計(jì)算結(jié)果為0
-
示例
select sum(age) from student;
Avg()
計(jì)算指定列的平均值,如果指定列類型不是數(shù)值類型則計(jì)算結(jié)果為0
-
示例
select avg(age) from student; select avg(sname) from student;
其他常用函數(shù)
時(shí)間函數(shù)
SELECT NOW(); # 2023-06-11 09:38:22
SELECT DAY (NOW()); # 11
SELECT DATE (NOW()); # 2023-06-11
SELECT TIME (NOW()); # 09:38:23
SELECT YEAR (NOW()); # 2023
SELECT MONTH (NOW()); # 6
SELECT CURRENT_DATE(); # 2023-06-11
SELECT CURRENT_TIME(); # 09:38:24
SELECT CURRENT_TIMESTAMP(); # 2023-06-11 09:38:24
SELECT ADDTIME('14:23:12','01:02:01'); # 15:25:13
SELECT DATE_ADD(NOW(),INTERVAL 1 DAY); # 2023-06-12 09:38:25
SELECT DATE_ADD(NOW(),INTERVAL 1 MONTH); # 2023-07-11 09:38:25
SELECT DATE_SUB(NOW(),INTERVAL 1 DAY); # 2023-06-10 09:38:25
SELECT DATE_SUB(NOW(),INTERVAL 1 MONTH); # 2023-05-11 09:38:26
SELECT DATEDIFF('2019-07-22','2019-05-05'); # 78
字符串函數(shù)
SUBSTRING函數(shù):切割字符串([start:end])
-
語(yǔ)法格式
SUBSTRING(s, start, length)
如果SUBSTRING()函數(shù)接收2個(gè)參數(shù);第一個(gè)參數(shù)為待截取的字符串,第二個(gè)參數(shù)為截取的起始位置。如果第二個(gè)參數(shù)為負(fù)整數(shù),則為倒數(shù)的起始位置
如果接受3個(gè)參數(shù);則第一個(gè)參數(shù)為待截取的字符串,第二個(gè)參數(shù)為截取的起始位置,第三個(gè)參數(shù)為截取的長(zhǎng)度。如果第二個(gè)參數(shù)為負(fù)整數(shù),則為倒數(shù)的起始位置
-
示例
-- 建表語(yǔ)句 DROP TABLE IF EXISTS order_detail; CREATE TABLE order_detail( order_id VARCHAR(8), order_time VARCHAR(32) ) ENGINE = InnoDB DEFAULT CHARSET = utf8; INSERT INTO order_detail (order_id,order_time) VALUE ('o001','2020-06-15 09:12:33') ,('o002','2020-06-15 13:24:09') ,('o003','2020-06-16 10:44:24') ,('o004','2020-06-17 08:05:52') ,('o005','2020-06-18 18:03:43'); -- 查詢語(yǔ)句 SELECT * , SUBSTRING(order_time,1,4) AS order_year, SUBSTRING(order_time,6,2) AS order_month, SUBSTRING(order_time,9,2) AS order_day FROM order_detail;
SUBSTRING_INDEX函數(shù):切割字符串(split)
-
語(yǔ)法格式
SUBSTRING_INDEX(str, delimiter, number)
返回從字符串str的第number個(gè)出現(xiàn)的分隔符delimiter之前的子串;
如果number是正數(shù),那么就是從左往右數(shù),返回第number個(gè)分隔符的左邊的全部?jī)?nèi)容;
相反,如果number是負(fù)數(shù),那么就是從右邊開始數(shù),第number個(gè)分隔符右邊的所有內(nèi)容
注意:如果number超過(guò)了實(shí)際分隔符的個(gè)數(shù),則返回實(shí)際個(gè)數(shù)的字符串
-
示例演示
-- 案例1 SELECT SUBSTRING_INDEX('a*b','*',1) -- a -- 案例2 SELECT SUBSTRING_INDEX('a*b','*',-1) -- b -- 案例3 SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('a*b*c*d*e','*',3),'*',-1) -- c -- 案例3可拆解成以下兩個(gè)步驟 SELECT SUBSTRING_INDEX('a*b*c*d*e','*',3); -- a*b*c SELECT SUBSTRING_INDEX('a*b*c','*',-1) -- c -- 案例4 -- 如果任一輸入?yún)?shù)為NULL,則返回NULL SELECT SUBSTRING_INDEX('https://www.google.com', null, 2); SELECT SUBSTRING_INDEX('https://www.google.com', '.', null); SELECT SUBSTRING_INDEX(null, '.', 2); -- 案例5 -- 如果number超過(guò)了實(shí)際分隔符的個(gè)數(shù),則返回實(shí)際個(gè)數(shù)的字符串 -- https://www.google.com SELECT SUBSTRING_INDEX('https://www.google.com', '.', 4);
-
示例實(shí)戰(zhàn)
drop table if exists user_submit; CREATE TABLE `user_submit` ( `id` int NOT NULL, `device_id` int NOT NULL, `profile` varchar(100) NOT NULL, `blog_url` varchar(100) NOT NULL ); INSERT INTO user_submit VALUES(1,2138,'180cm,75kg,27,male','http:/url/bisdgboy777'); INSERT INTO user_submit VALUES(2,3214,'165cm,45kg,26,female','http:/url/dkittycc'); INSERT INTO user_submit VALUES(3,6543,'178cm,65kg,25,male','http:/url/tigaer'); INSERT INTO user_submit VALUES(4,4321,'171cm,55kg,23,female','http:/url/uhsksd'); INSERT INTO user_submit VALUES(5,2131,'168cm,45kg,22,female','http:/url/sysdney'); SELECT device_id, SUBSTRING_INDEX(blog_url,'/',-1)AS user_name FROM user_submit;
LOWER&UPPER函數(shù):大小寫轉(zhuǎn)化
-
語(yǔ)法格式
LOWER(str)
將字符串str的所有字母轉(zhuǎn)換成小寫字母
UPPER(str)
將字符串str的所有字母轉(zhuǎn)換成大寫字母
-
示例
DROP TABLE IF EXISTS `vendors`; CREATE TABLE `vendors` ( `id` int(11) NOT NULL, `vend_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; INSERT INTO `vendors` VALUES (1, 'Acme'); INSERT INTO `vendors` VALUES (2, 'Anvils R Us'); INSERT INTO `vendors` VALUES (3, 'Furball Inc.'); INSERT INTO `vendors` VALUES (4, 'Jet Set'); INSERT INTO `vendors` VALUES (5, 'Jouets Ft Ours'); INSERT INTO `vendors` VALUES (6, 'LT Supplies');
SELECT vend_name, UPPER(vend_name)AS vend_name_upper, LOWER(vend_name)AS vend_name_lower FROM vendors ORDER BY vend_name;
CONCAT&CONCAT_WS函數(shù):連接字符串
-
CONCAT語(yǔ)法格式
SELECT CONCAT(str1,str2,…) FROM [表名];
將多個(gè)字段拼接為一個(gè)字段 (字符串 str1,str2 等多個(gè)字符串合并為一個(gè)字符串,多個(gè)字符串之間用逗號(hào)分隔)
-
注意事項(xiàng)
可以有很多個(gè)參數(shù),如果參數(shù)有一個(gè)是NULL,則結(jié)果返回NULL(使用CONCAT()函數(shù)對(duì)包含NULL的數(shù)據(jù)進(jìn)行拼接時(shí),結(jié)果為NULL,所以在對(duì)數(shù)據(jù)進(jìn)行拼接之前,應(yīng)該先檢查要拼接的字段是否存在NULL)
-
示例
-- 結(jié)果是MySQL SELECT CONCAT('My', 'S', 'QL'); -- 結(jié)果是SQL Runoob Gooogle Facebook SELECT CONCAT("SQL ", "Runoob ", "Gooogle ", "Facebook"); -- 結(jié)果是Null SELECT CONCAT('My', NULL, 'QL'); -- 一個(gè)數(shù)字參數(shù)被變換為等價(jià)的字符串形式 -- 結(jié)果是143 SELECT CONCAT(14,3);
-
CONCAT_WS語(yǔ)法格式
SELECT CONCAT_WS(‘拼接符’,str1,str2,…) FROM [表名];
可以理解成在CONCAT的基礎(chǔ)上增添了拼接符
-
注意事項(xiàng)
多字段拼接,字段間使用同樣的拼接符(會(huì)自動(dòng)跳過(guò)NULL)
-
示例
-- 結(jié)果是data_frog_study SELECT CONCAT_WS("_", "data", "frog", "study"); -- 結(jié)果是SQL-Tutorial-is-fun! SELECT CONCAT_WS("-", "SQL", "Tutorial", "is", "fun!")AS ConcatenatedString; -- 結(jié)果是hello-word! SELECT CONCAT_WS("-", "hello", null, "word!")AS ConcatenatedString;
REPLACE函數(shù):字符串替換
將字符串to_str替代字符串str中的字符串from_str,返回替換后的字符串str
-
語(yǔ)法格式
格式: REPLACE(str,from_str,to_str)
-
注意事項(xiàng)
如果from_str不在str內(nèi),直接跳過(guò)
-
示例
-- 結(jié)果是http:www.google.com.cn SELECT REPLACE('http://www.google.com.cn/','/',''); -- 將字符串a(chǎn)bc中的字符a替換為字符x SELECT REPLACE('abc','a','x') -- xbc -- 13922221111 SELECT REPLACE('13922221111','136','138');
--
SELECT INSTR ();
--統(tǒng)計(jì)長(zhǎng)度
SELECT LENGTH();
數(shù)學(xué)函數(shù)
ROUND函數(shù):四舍五入
把數(shù)值字段舍入為指定的小數(shù)位數(shù)
-
語(yǔ)法格式
SELECT ROUND(column_name,[decimals]) FROM [表名];
- column_name: 要舍入的字段,必需
- decimals: 規(guī)定要返回的小數(shù)位數(shù),可選
-
示例一:ROUND(X)
返回’參數(shù)X’四舍五入的一個(gè)整數(shù)
-- ROUND(X)函數(shù)將值X四舍五入之后保留整數(shù)部分 -- -7 SELECT ROUND(-6.6); -- -8 SELECT ROUND(-8.49); -- -9 SELECT ROUND(-8.50); -- 1 SELECT ROUND(1); -- 2 SELECT ROUND(1.58); -- 3 SELECT ROUND(3.49); -- 4 SELECT ROUND(3.50); -- ROUND(X)與ROUND(X,0)所得結(jié)果相同 -- 1123 SELECT ROUND(1123.26723); -- 1123 SELECT ROUND(1123.26723,0);
-
示例二:ROUND(X,D)
返回’參數(shù)X’四舍五入的有 D 位小數(shù)的一個(gè)數(shù)字。
- 如果D為0,結(jié)果將沒有小數(shù)點(diǎn)或小數(shù)部分;
- 如果D為負(fù)數(shù),這時(shí)是指定小數(shù)點(diǎn)左邊的D位整數(shù)位為0,同時(shí)小數(shù)位均為0
-- 1123.27 SELECT ROUND(1123.26723,2); -- 1123.3 SELECT ROUND(1123.26723,1); -- 1123 SELECT ROUND(1123.26723,0); -- 1120 SELECT ROUND(1123.26723,-1); -- 1100 SELECT ROUND(1123.26723,-2); -- 1000 SELECT ROUND(1123.26723,-3); -- 根據(jù)參數(shù)D值,將參數(shù)X四舍五入后得到保留小數(shù)點(diǎn)后D位的值,X值的小數(shù)位不夠D位的補(bǔ)零 -- 如果D為負(fù)值,則保留小數(shù)點(diǎn)左邊D位,先進(jìn)行四舍五入操作,再將相應(yīng)的位數(shù)值取零 -- -6.7 SELECT ROUND(-6.66,1); -- 3.33 SELECT ROUND(3.33,3); -- 90 SELECT ROUND(88.66,-1); -- 100 SELECT ROUND(88.46,-2);
其他函數(shù)
IFNULL函數(shù):判斷是否為NULL(類比與dict.get())
-
語(yǔ)法格式
IFNULL(expression, alt_value)
-
expression: 要測(cè)試的值
-
alt_value: expression表達(dá)式為NULL時(shí)返回的值
-
-
擴(kuò)展
如果要檢查值是否為
NULL
,則可以在WHERE
子句中使用IS NULL
或IS NOT NULL
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-486695.html -
示例
-- 第一個(gè)參數(shù)為NULL SELECT IFNULL(NULL, "World"); -- World -- 第一個(gè)參數(shù)不為NULL SELECT IFNULL("Hello", "World"); -- Hello -- 1不為NULL SELECT IFNULL(1,0); -- 1 -- ''字符串不為NULL SELECT IFNULL('',1); -- '' SELECT IFNULL(NULL,'IFNULL function'); -- IFNULL function
CREATE TABLE IF NOT EXISTS contacts ( contact_id INT AUTO_INCREMENT PRIMARY KEY, contact_name VARCHAR(20) NOT NULL, business_phone VARCHAR(15), home_phone VARCHAR(15) ); INSERT INTO contacts(contact_name,business_phone,home_phone) VALUES('John Doe','(541) 754-3009',NULL), ('Cindy Minsu',NULL,'(541) 754-3110'), ('Sue Greenspan','(541) 754-3010','(541) 754-3011'), ('Lily Bush',NULL,'(541) 754-3111'); # 如果聯(lián)系人的商務(wù)電話不可用,可以通過(guò)查詢獲得聯(lián)系人的家庭電話也是一個(gè)獲取聯(lián)系方式的辦法 SELECT contact_name, IFNULL(business_phone, home_phone)AS phone FROM contacts;
-- 絕對(duì)值
SELECT ABS(-136); # 136
-- 向下取整
SELECT FLOOR(3.14); # 3
-- 向上取整
SELECT CEILING(3.14); # 4
到了這里,關(guān)于【MySQL】SQL的函數(shù)用法的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!