MYSQL之排序及常见函数

MYSQL02 P39

排序

order by ASC升序 DESC降序

select * from 表 order by 字段 asc;
支持多个字段进行排序
如:select * from 表 order by 字段 asc,字段 desc;
按函数排序		LENGTH(字段)
特点:
	1.asc是升序,desc是降序。默认为asc。
	2.order by子句中可以支持多个字段、表达式、函数、别名。
	3.order by子句一般是放在查询语句后面,limit子句除外。

常见函数

	select 函数名(实参) 【from 表】;
	分类:
		1.单行函数:concat、length、ifnull等
		2.分组函数(做统计使用),又称统计函数、聚合函数

字符函数

	1.length()	获取参数值的字节个数
	2.concat()	拼接字符串
	3.upper()、lower()	将字段值变大写\小写    还有 lcase(), ucase(),但是其他数据库中函数相兼容,因此不建议使用
	4.substr(substring)	截取
		sql中,索引从 1 开始
		substr('abcdef',1,3)
		结果集返回:'abc'
	5.instr()	返回子串第一次出现的索引
		select instr('abcdef','cd');
		返回结果:3
	6.trim()	去除前后空格及指定字符    ltrim()、rtrim()
	7.lpad()	用指定的字符实现左填充指定长度
	8.rpad()	用指定的字符实现右填充指定长度
	9.replace()	替换

数学函数

	1.round()	四舍五入
	2.ceil()	向上取整 返回>=该参数的最小整数
	3.floor()	向下取整 返回<=该参数的最大整数
	4.truncate()	截取
	5.mod()	取余		a-a/b*b

日期函数

	1.now()	返回当前系统日期+时间
	2.curdate()	返回当前系统日期,不包含时间
	3.curtime()	返回当前时间,不包含日期
	4.str_to_date()	将字符通过制定的格式转换成日期
	5.date_format()	将日期转换成字符

流程控制函数

	1.if函数:if	else的效果
		SELECT IF(expr1,expr2,expr3)
		若expr1判断为trur,则取expr2的值
		若expr1判断为false,则取expr3的值
	2.case函数
		1)	case 要判断的字段或表达式
			when 常量1 then 要显示的值1 或 语句1;
			when 常量2 then 要显示的值2 或 语句1;
			....
			else 要显示的默认值或语句n;
			end
		2)	case 
			when 条件1 then 要显示的值1 或 语句1;
			when 条件2 then 要显示的值2 或 语句2;
			....
			else 条件n then 要显示的值n 或 语句n;
			end

分组函数

1.		
	1.sum
	2.avg
	3.max
	4.min
	5.count	计算个数,会忽略null值
	以上分组函数都忽略null值
	和分组函数一同查询的字段要求是group by后的字段

Count()

	1.在MYISAM引擎中,count(*)把表的总行数存在了磁盘上,因此效率高。
	INNODB中,count(*)需要将表中数遍历读取,然后累计计数,所以较慢。
	2.count('字段')效率比count(1)、count(*)效率低,因为其中需要对'字段进行判断'
MySQL 支持窗口函数,可以用来进行排序操作。常用的窗口函数有 ROW_NUMBER、RANK、DENSE_RANK 和 NTILE。 1. ROW_NUMBER ROW_NUMBER 函数会给每一行赋予一个唯一的数字,用来表示它在结果集中的位置。语法如下: ``` ROW_NUMBER() OVER (ORDER BY column) ``` 其中,column 表示排序的列名。例如,如果要按照 salary 列进行排序,可以使用以下语句: ``` SELECT name, salary, ROW_NUMBER() OVER (ORDER BY salary DESC) AS rank FROM employees; ``` 2. RANK RANK 函数会给每一行赋予一个排名,相同的值会得到相同的排名。如果有两个值相同,那么它们的排名会相同,但是下一个排名会跳过相同数量的值。语法如下: ``` RANK() OVER (ORDER BY column) ``` 例如,如果要按照 salary 列进行排序,可以使用以下语句: ``` SELECT name, salary, RANK() OVER (ORDER BY salary DESC) AS rank FROM employees; ``` 3. DENSE_RANK DENSE_RANK 函数会给每一行赋予一个排名,相同的值会得到相同的排名。如果有两个值相同,它们的排名也会相同,但是下一个排名不会跳过相同数量的值。语法如下: ``` DENSE_RANK() OVER (ORDER BY column) ``` 例如,如果要按照 salary 列进行排序,可以使用以下语句: ``` SELECT name, salary, DENSE_RANK() OVER (ORDER BY salary DESC) AS rank FROM employees; ``` 4. NTILE NTILE 函数会将结果集分成指定数量的桶,并给每个桶分配一个 ID。语法如下: ``` NTILE(n) OVER (ORDER BY column) ``` 其中,n 表示桶的数量。例如,如果要将结果集分成 4 个桶,可以使用以下语句: ``` SELECT name, salary, NTILE(4) OVER (ORDER BY salary DESC) AS bucket FROM employees; ``` 这样会将结果集分成 4 个桶,并给每个桶分配一个 ID。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值