Mysql学习笔记(2):常用函数

    MySQL数据库中提供了很丰富的函数。MySQL函数包括数学函数、字符串函数、日期和时间函数、条件判断函数、系统信息函数、加密函数、格式化函数、聚合函数等。


数学函数

函数 作用
ABS(x) 返回x的绝对值
CEIL(x),CEILING(x) 向上取整,返回大于或者等于x的最小整数
FLOOR(x) 返回小于或者等于x的最大整数
RAND() 返回0~1的随机数
RAND(x) 返回0~1的随机数,x值相同时返回的随机数相同
SIGN(x) 返回x的符号,x是负数、0、正数分别返回-1、0和1
PI() 返回圆周率
TRUNCATE(x,y) 返回数值x保留到小数点后y位的值
ROUND(x) 四舍五入,返回离x最近的整数
ROUND(x,y) 四舍五入,保留x小数点后y位的值,但截断时要进行四舍五入
POW(x,y),POWER(x,y) 返回x的y次方
SQRT(x) 返回x的平方根
EXP(x) 返回e的x次方
MOD(x,y) 返回x除以y以后的余数
LOG(x) 返回自然对数(以e为底的对数)
LOG10(x) 返回以10为底的对数

示例:

ABS(x)

  • 作用:返回x的绝对值
  • 参数x:数值
    SELECT ABS(-10);   #结果: 10

---------


CEIL(x) 和 CEILING(x)

  • 作用:向上取整
  • 参数x:数值

    SELECT CEIL(10.2),CEILING(10);    #结果: 11,10

----------


FLOOR(x)

  • 作用:向下取整
  • 参数x:数值

    SELECT FLOOR(10.6);     #结果 :10

----------


RAND(x)

  • 作用:返回0~1的随机数,x值相同时返回的随机数相同
  • 参数x:无或者任意值(字符或者数值)
    SELECT RAND();    #结果 :0.155220427694936(随机数)

    SELECT RAND('a'),RAND('a');    #结果:返回两个相同的随机数

----------


SIGN(x)

  • 作用:返回x的符号,x是负数、0、正数分别返回-1、0和1
  • 参数x:数值

    SELECT SIGN(-10);    #结果:-1

----------


PI()

  • 作用:返回圆周率
  • 参数x:无
    SELECT PI();   #结果:3.141593

---------


TRUNCATE(x,y)

  • 作用:返回数值x保留到小数点后y位的值
  • 参数xy:数值
     SELECT TRUNCATE(10.123456 , 2);      #结果:10.12

----------


ROUND(x)

  • 作用:四舍五入,返回离x最近的整数
  • 参数x:数值

    SELECT ROUND(10.51);      #结果:11

    从第一个小数开始四舍五入,取整数。

----------

ROUND(x,y)

  • 作用:四舍五入,保留x小数点后y位的值
  • 参数xy:数值

    SELECT ROUND(10.525 , 2);     #结果:10.53

    从第3个小数开始四舍五入,保留两位小数。

----------

POW(x,y) 和 POWER(x,y)

  • 作用:返回x的y次方
  • 参数xy:数值

    SELECT POW(10,2);     #结果:100

    10的2次方等于100

----------

SQRT(x)

  • 作用:返回x的平方根
  • 参数x:数值

    SELECT SQRT(4);     #结果:2

    4的平方根等于2

----------

EXP(x)

  • 作用:返回e的x次方
  • 参数x:数值

    SELECT EXP(0);     #结果:1

    e的0次方等于1

----------

MOD(x,y)

  • 作用:返回x除以y以后的余数
  • 参数xy:数值

    SELECT MOD(10,3);    #结果:1

    10%3 = 1

----------

LOG(x)

  • 作用:返回自然对数(以e为底的对数)
  • 参数x:数值

    SELECT LOG(1);   #结果:0

    e的0次方等于1

----------

LOG10(x)

  • 作用:返回以10为底的对数
  • 参数x:数值

    SELECT LOG10(100);   #结果:2

    10的2次方等于100

----------

================


字符串函数

函数 作用
CHAR_LENGTH(s) 返回字符串s的字符长度(不考虑位数)
LENGTH(s) 返回字符串s的字节长度(需要考虑位数)
CONCAT(s1,s2,…) 将字符串s1,s2等多个字符串合并为一个字符串
CONCAT_WS(x,s1,s2,..) 同CONTAC(S1,S2,…)函数,但是每个字符串要直接加上x
INSERT(s1,x,len,s2) 将字符串s2替换s1的位置开始长度为len的字符串
UPPER(s),UCASE(s) 将字符串s的所有字母都变成大写字母
LOWER(s),LCASE(s) 将字符串s的所有字母都变成小写字母
LEFT(s,n) 返回字符串s前n个字符
RIGHT(s,n) 返回字符串s后n个字符
LPAD(s1,len,s2) 字符串s2来填充s1的开始处,使字符串的长度达到len
RPAD(s1,len,s2) 字符串s2来填充s1的结尾处,使字符串的长度达到len
LTRIM(s) 去掉字符串s开始处的空格
RTRIM(s) 去掉字符串s结尾处的空格
TRIM(s) 去掉字符串s开始处和结尾处的空格
TRIM(s1 FROM s) 去掉字符串s开始处和结尾处的字符串s1
REPEAT(s,n) 将字符串s重复n次
SPACE(n) 返回空格n次
REPLACE(s,s1,s2) 用字符串s2代替字符串s中的字符串s1
STRCMP(s1,s2) 比较字符串s1,s2
SUBSTRING(s,n,len) 获取从字符串s中第n个位置开始长度为len的字符串
MID(s,n,len) 同SUBSTRING(s,n,len)
LOCATE(s1,s),POSITION(s1 IN S) 从字符串s中获取字符串s1的开始位置
INSTR(s,s1) 从字符串s中获取字符串s1的开始位置
REVERSE(s) 将字符串s的顺序反过来
ELT(n,s1,s2,…) 返回第n个字符串
FIELD(s,s1,s2,…) 返回第一个与字符串s匹配的字符串的位置
FIND_IN_SET(s1,s2) 返回在字符串s2中与字符串s1匹配的字符串的位置
MAKE_SET(x,s1,s2,…) 按x的二进制数从s1,s2,…,sn中选取字符串

示例:

CHAR_LENGTH(s)

  • 作用:返回字符串s的字符长度
  • 参数:字符串

   SELECT CHAR_LENGTH('Jack你好');      #结果:6

  • 说明:返回的是字符的长度,有几个字符就是多少长度

----------

LENGTH(s)

  • 作用:返回字符串s的字节长度
  • 参数:字符串

    SELECT LENGTH('Jack你好');     #结果:10

  • 说明:返回的是字节长度,需要考虑位数。上面一个中文字符算作3个字节。

----------

CONCAT(s1,s2,…)

  • 作用:将字符串s1,s2等多个字符串合并为一个字符串
  • 参数:字符串

    SELECT CONCAT('aa' , 'bb' , 'cc');      #结果:aabbcc

----------

CONCAT_WS(x,s1,s2,..)

  • 作用:同CONTAC(S1,S2,…)函数,但是每个字符串要直接加上x
  • 参数:字符串

    SELECT CONCAT_WS('S','aa','bb','cc');      #结果:aaSbbScc

  • 说明:从s2开始,每个字符前都要加上x

----------

INSERT(s1,x,len,s2)

  • 作用: 把字符串s1由位置x起len个字符长的子串替换为字符串s2
  • 参数:字符串(s1,s2)和数值(x,len)

    SELECT INSERT( 'abcde' , 3 , 2 , 'cc' );    #结果:abcce

  • 说明:abcde 从第三个字符 c 开始截取两个字符即 cd 替换为 cc ,最后变为 abcce

----------

UPPER(s) 和 UCASE(s)

  • 作用:将字符串s的所有字母都变成大写字母
  • 参数:字符串

    SELECT UPPER('abcDE');       #结果:ABCDE

----------

LOWER(s) 和 LCASE(s)

  • 作用:将字符串s的所有字母都变成小写字母
  • 参数:字符串

    SELECT UPPER('abcDE');     #结果:abcde

----------

LEFT(s,n) 和 RIGHT(s,n)

  • 作用:返回字符串s前(后)n个字符
  • 参数:字符串(s),数值(n)

    SELECT LEFT('abcDE',3);   #结果:abc

    SELECT RIGHT('abcDE',3);   #结果:cDE

----------

LPAD(s1,len,s2) 和 RPAD(s1,len,s2)

  • 作用:如果s1长度不足len,在左边(右边)使用s2填充
  • 参数:字符串(s1,s2),数值(len)

    SELECT LPAD('abc',5,'s');   #结果:ssabc

    SELECT RPAD('abc',5,'s');   #结果:abcss

    如果s1长度大于len,则就是截取s1

    SELECT LPAD('abc',1,'s');  #结果:a

----------

LTRIM(s) 和 RTRIM(s)

  • 作用:去掉字符串s左边(右边)的空格
  • 参数:字符串

    SELECT LTRIM('   abc');   #结果:abc

    SELECT RTRIM('abc   ');   #结果:abc

----------

TRIM(s)

  • 作用:去掉字符串s两边的空格
  • 参数:字符串

    SELECT TRIM('   abc   ');   #结果:abc

----------

TRIM(s1 FROM s)

  • 作用:去掉字符串s开始处和结尾处的字符串s1
  • 参数:字符串
   SELECT TRIM( 's' FROM 'ssabcdess' );   #结果:abcde

----------

REPEAT(s,n)

  • 作用:将字符串s重复n次
  • 参数:字符串(s),数值(n)

    SELECT REPEAT('s',5);   #结果:sssss

----------

SPACE(n)

  • 作用:返回空格n次
  • 参数:数值

    SELECT SPACE(50);   #结果:                                              

----------

REPLACE(s,s1,s2)

  • 作用:用字符串s2代替字符串s中的字符串s1
  • 参数:字符串

    SELECT REPLACE('abcde','cd','ss');   #结果:absse

    可以用来去空格

    SELECT REPLACE( 'ab  c de' , ' ' , '');     #结果:abcde

----------

STRCMP(s1,s2)

  • 作用:比较字符串s1,s2,比较的是ASCII码。s1大于、等于、小于s2,返回1 、0 、-1
  • 参数:数值

    SELECT STRCMP('ab','ba');  #结果:-1

----------


SUBSTR(s,n,len)  、SUBSTRING(s,n,len) 和 MID(s,n,len)

  • 作用:获取从字符串s中第n个位置开始长度为len的字符串
  • 参数:字符串(s)、数值(n、len)

   SELECT SUBSTR('abcde',2,3);   #结果:bcd

----------

LOCATE(s1 , s) 和 POSITION(s1 IN S)

  • 作用:从字符串s中获取字符串s1的开始位置
  • 参数:字符串

    SELECT LOCATE('bc','abcde');   #结果:2

    SELECT POSITION('bc' IN 'abcde');   #结果:2

----------


INSTR(s , s1)

  • 作用:返回以10为底的对数
  • 参数:字符串

    SELECT INSTR('abcde','bc');   #结果:2

  • 说明: 注意和上面那个参数区别

----------

REVERSE(s)

  • 作用:将字符串s的顺序反过来
  • 参数:字符串

    SELECT REVERSE('abcde');   #结果:edcba

----------

ELT(n,s1,s2,…)

  • 作用:返回第n个字符串
  • 参数:字符串(s1、s2...)、数值(n)

    SELECT ELT(2,'a','b','c');   #结果:b

----------

FIELD(s,s1,s2,…)

  • 作用:返回第一个与字符串s匹配的字符串的位置
  • 参数:字符串

    SELECT FIELD('c','a','b','c');   #结果:3

----------


FIND_IN_SET(s1,s2)

  • 作用:返回字符串s2在字符串s1中匹配的字符串的位置
  • 参数:字符串

    SELECT FIND_IN_SET( 'c' , 'a,b,c,d,e' );   #结果:3

  • 说明:s2 必须用逗号隔开
----------

================


日期和时间函数

函数 作用
CURDATE(),CURRENT_DATE() 返回当前日期,如2016-07-30
CURTIME(),CURRENT_TIME() 返回当前时间,如22:13:41

NOW(),CURRENT_TIMESTAMP(),

LOCALTIME(),SYSDATE(),LOCALTIMESTAMP()

返回当前日期和时间
UNIX_TIMESTAMP() 以UNIX时间戳的形式返回当前时间
UNIX_TIMESTAMP(d) 将时间d以UNIX时间戳的形式返回
FROM_UNIXTIME(d) 把UNIX时间戳的时间转换为普通格式时间
UTC_DATE() 返回UTC日期
UTC_TIME() 返回UTC时间
MONTH(d) 返回日期d中月份值,范围为1~12
MONTHNAME(d) 返回日期d中的月份名称,如January,Febuary
DAYNAME(d) 返回日期d是星期几,如Monday,Tuesday
DAYOFWEEK(d) 返回日期d是星期几,如1是星期一,2是星期二等
WEEKDAY(d) 返回日期d是星期几,如0是星期一,1是星期二等
WEEK(d) 计算日期d是本年的第几周,范围0~53
WEEKOFYEAR 计算日期d是本年的第几周,范围1~54
DAYOFYEAR(d) 计算日期d是本年的第几天
DAYOFMONTH(d) 计算日期d是本月的第几天
YEAR(d) 返回日期d的年份值
QUARTER(d) 返回日期d是第几个季度,范围1~4
HOUR(t) 返回时间t中的小时值
MINUTE(t) 返回时间t中的分钟值
SECOND(t) 返回时间t中的秒钟值
EXTRACT(type FROM d)

从日期d中获取指定值,type指定返回的值,如YEAR,HOUR等

TIME_TO_SEC(t) 将时间t转换为秒
SEC_TO_TIME(s) 将以秒为单位的时间s转换为时分秒的格式
DATEDIFF(d1,d2) 计算日期d1~d2之间相隔的天数
SUBDATE(d,n) 计算起始日期d减去n天的日期

示例:

CURDATE() 和 CURRENT_DATE()

  • 作用:返回当前日期,如2018-01-01
  • 参数:无

    SELECT CURDATE();   #结果:2018-06-05

----------

CURTIME() 和 CURRENT_TIME()

  • 作用:返回当前时间,如22:13:41
  • 参数:无

    SELECT CURTIME();   #结果:16:36:28

----------

NOW()、CURRENT_TIMESTAMP()

、LOCALTIME()、SYSDATE() 和 LOCALTIMESTAMP()

  • 作用:返回当前日期和时间
  • 参数:无

    SELECT NOW();      #结果:2018-06-05 16:39:29

----------

UNIX_TIMESTAMP()

  • 作用:以UNIX时间戳的形式返回当前时间(毫秒形式)
  • 参数:无

   SELECT UNIX_TIMESTAMP();    #结果:1528188019

----------


UNIX_TIMESTAMP(d)

  • 作用:将时间d以UNIX时间戳的形式返回
  • 参数:日期字符串

    SELECT UNIX_TIMESTAMP('2018-06-05 16:39:29');  #结果:1528187969

----------


FROM_UNIXTIME(d)

  • 作用:把UNIX时间戳的时间转换为普通格式时间
  • 参数:字符串或数值

    SELECT FROM_UNIXTIME(1528187969);  #结果:2018-06-05 16:39:29

----------


UTC_DATE()

  • 作用:返回UTC日期
  • 参数:无

    SELECT UTC_DATE();     #结果:2018-06-05

----------


UTC_TIME()

  • 作用:返回UTC时间
  • 参数:无

    SELECT UTC_TIME();      #结果:08:48:11

----------


MONTH(d)

  • 作用:返回日期d中月份值,范围为1~12
  • 参数:日期字符串

   SELECT MONTH('2018-06-05');       #结果:6

----------


MONTHNAME(d)

  • 作用:返回日期d中的月份名称,如January,Febuary
  • 参数:日期字符串

    SELECT MONTHNAME('2018-06-05');      #结果:June

----------


DAYNAME(d)

  • 作用:返回日期d是星期几,如Monday,Tuesday
  • 参数:日期字符串

    SELECT DAYNAME('2018-06-05');      #结果:Tuesday

----------


DAYOFWEEK(d)

  • 作用:返回日期d是星期几,从星期天开始算。1是星期天,2是星期一等
  • 参数:日期字符串

    SELECT DAYOFWEEK('2018-06-05');     #结果:3

----------


WEEKDAY(d)

  • 作用:返回日期d是星期几,如0是星期一,1是星期二等
  • 参数:日期字符串

    SELECT WEEKDAY('2018-06-05');    #结果:1

----------


WEEK(d)

  • 作用:计算日期d是本年的第几周,范围0~53
  • 参数:日期字符串

   SELECT WEEK('2018-06-05');      #结果:22

----------


WEEKOFYEAR(d)

  • 作用:计算日期d是本年的第几周,范围1~54
  • 参数:日期字符串

    SELECT WEEKOFYEAR('2018-06-05');   #结果:23

----------


DAYOFYEAR(d)

  • 作用:计算日期d是本年的第几天
  • 参数:日期字符串

    SELECT DAYOFYEAR('2018-06-05');   #结果:156

----------


DAYOFMONTH(d)

  • 作用:计算日期d是本月的第几天
  • 参数:日期字符串

    SELECT DAYOFMONTH('2018-06-05');   #结果:5

----------


YEAR(d)

  • 作用:返回日期d的年份值
  • 参数:日期字符串

    SELECT YEAR('2018-06-05');   #结果:2018

----------


QUARTER(d)

  • 作用:返回日期d是第几个季度,范围1~4
  • 参数:日期字符串

    SELECT QUARTER('2018-06-05');   #结果:2

----------


HOUR(t)

  • 作用:返回时间t中的小时值
  • 参数:时间字符串

    SELECT HOUR('2018-06-05 17:10:00');  #结果:17

----------


MINUTE(t)

  • 作用:返回时间t中的分钟值
  • 参数:时间字符串

    SELECT MINUTE('2018-06-05 17:10:00');   #结果:10

----------


SECOND(t)

  • 作用:返回时间t中的秒钟值
  • 参数:时间字符串

    SELECT SECOND('2018-06-05 17:10:20');   #结果:20

----------


EXTRACT(type FROM d)

  • 作用:从日期d中获取指定值,type指定返回的值,如YEAR,MONTH等
  • 参数:日期字符串(d)、关键字(type)

    SELECT EXTRACT(YEAR FROM '2018-06-05 17:10:20');   #结果:2018

----------


TIME_TO_SEC(t)

  • 作用:将时间t转换为秒
  • 参数:时间字符串

    SELECT TIME_TO_SEC('17:10:20');   #结果:61820

----------

============


条件判断函数

函数 作用

IF(expr, v1, v2)

如果expr成立,返回值为v1,否则返回v2

IFNULL(v1, v2)

如果v1不为空,就显示v1,否则就显示v2的值

CASE WHEN
多条件判断

示例:


IF(expr, v1, v2)

  • 作用:如果expr成立,返回值为v1,否则返回v2
  • 参数:expr整体表示TRUE或FALSE,可以是一个表达式。v1、v1可以为任何值,具体看需求。

    SELECT IF(1=1,'aaa','bbb');   #结果:aaa

----------


IFNULL(v1, v2)

  • 作用:如果v1不为NULL,就显示v1,否则就显示v2的值
  • 参数:任意值

    SELECT IFNULL(NULL,'bbb');   #结果:bbb

    v1必须为NULL,才会显示v2, '' 和 ' ' 都不可以

----------


CASE WHEN

  • 作用:多条件判断语句
  • 参数:无

   格式#1:

    CASE [col_name] WHEN [value1] THEN[result1]…ELSE [default] END

    枚举这个字段所有可能的值

    SELECT NAME AS '英雄',
        CASE NAME
            WHEN '德莱文' THEN '斧子'
            WHEN '盖伦' THEN '大宝剑'
            ELSE '其他'
        END AS '装备'

    FROM user_info;

    结果:

    


    格式#2:

    CASE WHEN [expr] THEN [result1]…ELSE[default] END

    多条件

   SELECT NAME,
       CASE
         WHEN grade >= 80 THEN '优秀'
         WHEN grade >= 60 AND grade <80 THEN '及格'
         ELSE '不及格'
       END AS 'grade'
    FROM
      student;

    

 

----------

============


系统信息函数

函数 作用
VERSION() 返回数据库的版本号
CONNECTION_ID() 返回服务器的连接数
DATABASE(),SCHEMA() 返回当前数据库名

USER(),SYSTEM_USER(),

SESSION_USER(),CURRENT_USER()

返回当前用户
CHARSET(str) 返回字符串str的字符集
LAST_INSERT_ID() 返回最近生成的AUTO_INCREMENET值

示例:

VERSION()

  • 作用:返回数据库的版本号
  • 参数:无

    SELECT VERSION();    #结果:5.1.49-community

----------


CONNECTION_ID()

  • 作用:返回服务器的连接数
  • 参数:无

    SELECT CONNECTION_ID();    #结果:1

----------


DATABASE() 和 SCHEMA()

  • 作用:返回当前数据库名
  • 参数:无

    SELECT DATABASE();    #结果:myemployees

----------


USER() 、SYSTEM_USER()、CURRENT_USER() 和 SESSION_USER()

  • 作用:返回当前用户
  • 参数:无

    SELECT USER();    #结果:root@localhost

----------


CHARSET(str)

  • 作用:返回字符串str的字符集
  • 参数:字符串

    SELECT CHARSET('');   #结果:utf8

----------


LAST_INSERT_ID()

  • 作用:返回最近生成的AUTO_INCREMENET值
  • 参数:无

    SELECT LAST_INSERT_ID();    #结果:6

----------

=============


加密函数

函数 作用
PASSWORD(str) 主要是用来给用户的密码加密的
MD5加密 主要对普通的数据进行加密
ENCODE(str,key)和DECODE(str,key) 使用key作为密钥加密解密字符串str
SHA(str)和SHA1(str) SHA加密
示例:

PASSWORD(str)

  • 作用:PASSWORD(str)函数主要是用来给用户的密码加密的
  • 参数:字符串

    SELECT PASSWORD('123456');    #结果:*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9

----------


MD5(str)

  • 作用:MD5加密
  • 参数:字符串

   SELECT MD5('123456');    #结果:e10adc3949ba59abbe56e057f20f883e

----------


ENCODE(str,key)和DECODE(str,key)

  • 作用:使用key作为密钥加密解密字符串str
  • 参数:字符串

    SELECT DECODE(ENCODE('123456','password'),'password');   #结果:123456

----------


SHA(str)和SHA1(str)

  • 作用:SHA加密
  • 参数:字符串

    SELECT SHA('123456');    #结果:7c4a8d09ca3762af61e59520943dc26494f8941b

----------

==========


格式化函数

函数 作用
FORMAT(n,d)

数字格式化,格式化后得到结果:###,###.#####

示例:

FORMAT(n,d)

  • 作用:数字格式化,指定保留的小数位,多余的四舍五入。格式化后得到结果:###,###.#####
  • 参数:数值

    SELECT FORMAT(100000.125 , 2 );    #结果:100,000.13

    保留两位小数,并四舍五入

----------

============


聚合函数

函数 作用
AVG(col) 返回指定列的平均值
COUNT(col)

返回指定列中非NULL值的个数

COUNT(1)、COUNT(*) 返回有多少条数据

MIN(col)

返回指定列的最小值

MAX(col)

返回指定列的最大值

SUM(col)

返回指定列的所有值之和

GROUP_CONCAT(col)

返回由属于一组的列值连接组合而成的结果
GROUP BY col1,col2... [HAVING]

将查询结果按 col1,col2...组合就进行分组,组合数据相同的为一组

示例:

student表数据


AVG([DISTINCT] col)

  • 作用:返回指定列的平均值
  • 参数:查询列(数值)

    SELECT AVG(grade) FROM student;    #结果:72

    先去重再计算:

    SELECT AVG(DISTINCT grade) FROM student;    #结果:70

  • 说明:
  1. 结果视具体的表数据而定。
  2. NULL值不参与计算。
  3. 先进行去重,再计算

----------

COUNT([DISTINCT]  col)

  • 作用:返回指定列中非NULL值的个数
  • 参数:查询列

    SELECT COUNT(grade) FROM student;    #结果:7

    先去重再计算:

    SELECT COUNT(DISTINCT grade) FROM student;    #结果:5

  • 说明:
  1. 结果视具体的表数据而定。
  2. NULL值不参与计算。
  3. 先进行去重,再计算

----------


COUNT(1) 和 COUNT(*)

  • 作用:返回有多少条数据
  • 参数:任意字符或数值

    SELECT COUNT(*) FROM student;    #结果:7

  • 说明:
  1. 结果视具体的表数据而定。
  2. 这里计算的是数据条数,跟是否NULL值没有关系。

----------


MIN([DISTINCT] col)

  • 作用:返回指定列的最小值
  • 参数:查询列(数值、字符串、时间...)

    SELECT MIN(grade) FROM student;    #结果:45

  • 说明:
  1. 结果视具体的表数据而定。

----------


MAX([DISTINCT] col)

  • 作用:返回指定列的最大值
  • 参数:查询列(数值、字符串、时间...)

    SELECT MAX(grade) FROM student;    #结果:80

  • 说明:
  1. 结果视具体的表数据而定。

----------


SUM([DISTINCT] col)

  • 作用:返回指定列的所有值之和
  • 参数:查询列(数值)

    SELECT SUM(grade) FROM student;     #结果:510

    先去重再计算:

    SELECT SUM(DISTINCT grade) FROM student;    #结果:305

  • 说明:
  1. 结果视具体的表数据而定
  2. 先进行去重,再计算

----------


GROUP_CONCAT(col)

  • 作用:返回由属于一组的列值连接组合而成的结果
  • 参数:查询列

   案例详解:

    原表数据:

    

   1. 使用GROUP_CONCAT(col)可以将每个学生的成绩组合到一列中,并且默认用逗号分割:

    SELECT NAME,GROUP_CONCAT(grade) FROM student GROUP BY NAME;

    

    2. 去重处理 GROUP_CONCAT( DISTINCT col) :

    SELECT NAME,GROUP_CONCAT(DISTINCT  grade) FROM student GROUP BY NAME;

    

    3. 排序 GROUP_CONCAT(  col  ORDER BY col  [DESC,ASC]) :

    SELECT NAME,GROUP_CONCAT( grade  ORDER BY grade DESC) FROM student GROUP BY NAME;
    

    4. 设置分隔符 GROUP_CONCAT(  col  SEPARATOR str) :

    SELECT NAME,GROUP_CONCAT(grade SEPARATOR ';') FROM student GROUP BY NAME;

    

    说明: 上面几个都可以同时使用

----------

GROUP BY col1,col2... [HAVING]

  • 作用:将查询结果按 col1,col2...组合就进行分组,组合数据相同的为一组.使用HAVING进行分组后的筛选
  • 参数:查询列

   SELECT NAME,SUM(grade) FROM student GROUP BY NAME; 

    #结果:

    

    分组后的筛选:

    SELECT NAME,SUM(grade) FROM student GROUP BY NAME HAVING SUM(grade)>200;

    #结果:

    

  • 说明:
  1. 通过 GROUP BY 后面的NAME列进行分组,然后再每个分组中计算总数。这时候可以列出NAME列。
  2. GROUP BY后面可以使用多个列进行分组,这时候可以列出这些分组列数据。
  3. GROUP BY可以使用再所有聚合函数中。

----------





































































猜你喜欢

转载自blog.csdn.net/abc997995674/article/details/80579226