通过一条sql语句,实现查询当前的胜率、超越了多少人等等,返回结果为百分比,下面通过实际案例说明。
假设有张表tableName,结构和数据如下:
条件1:查询type_id为10,score分数大于120的人所占百分比,sql语句为:
拆解分析SQL语句:
1、首先查询大于120分的人数:SELECT COUNT(id) FROM tableName where type_id = 10 and score >120
2、通过CAST(查询结果 AS DECIMAL)函数,把查询到的结果转换成浮点数
3、浮点数 * 100(获得百分比方法为:A/B*100,然后拼接百分号,我们这里先乘100再除)
4、查询全部人数并通过CAST()函数转化成浮点数
5、用大于120分的人数除以全部人数
6、通过CONVERT(相除结果,DECIMAL)函数,把计算的结果转成浮点数
7、通过CAST(计算结果 AS CHAT)函数,把计算结果转成字符型
8、通过CONCAT(字符型结果,'%')函数,把百分号拼到查询结果后面
条件2:查询type_id为10,score分数大于120的男生所占百分比,假设用户表名是userTable,性别字段sex,sql语句为:
上面的sql语句只是在第一条的基础上,做了简单修改,主要为了体现联表查询应该在什么位置,方便快速使用。
补充上面出现的Mysql基本函数和数据类型:
1、CAST()函数:
对数据进行类型转换,CAST()函数语法为:CAST(字段名 AS 转换的类型),其中类型可以为:
2、DECIMAL数据类型:
DECIMAL是MySQL中存在的精准数据类型(浮点型),语法格式“DECIMAL(M,D)”,其中:
M是整个数字的最大精度(长度),其范围为“1~65”(个字符),默认值是10;
D是小数点右侧数字的数目(标度),其范围是“0~30”,但不得超过M;
要把某列的数据类型定义为DECIMAL,使用以下语法:
以下示例使用DECIMAL数据类型定义的一个叫作money的列。
MySQL允许使用以下语法:
这相当于:
在这种情况下,列只有整数部分,不包含小数部分和小数点
此外,我们甚至可以使用以下语法:
在这种情况下,M的默认值为10,相当于:
3、CONVERT()函数:
CONVERT函数用于将值转换为指定的数据类型或字符集
⑴.转换指定字符集,语法结构:
例如:
⑵.转换指定数据类型,语法结构:
值 | 描述 |
DATE | 将expr转换成'YYYY-MM-DD'格式 |
DATETIME | 将expr转换成'YYYY-MM-DD HH:MM:SS'格式 |
TIME | 将expr转换成'HH:MM:SS'格式 |
CHAR | 将expr转换成CHAR(固定长度的字符串)格式 |
SIGNED | 将expr转换成INT(有符号的整数)格式 |
UNSIGNED | 将expr转换成INT(无符号的整数)格式 |
DECIMAL | 将expr转换成FLOAT(浮点数)格式 |
BINARY | 将expr转换成二进制格式 |
4、concat()函数:
将多个字符串连接成一个字符串。
语法:concat(str1, str2,...),返回结果为连接参数产生的字符串,如:
返回如下结果:
注意:如果有任何一个参数为null,则返回值为null,如:
cast()和convert()的区别:
cast()和convert()都是类型转换函数,可以将某个数据类型的值转换为另一种数据类型。
其实在大部分情况下,这两个函数都是没有区别的,MySQL官方文档中对于cast()也提到:
意思是:cast()的此操作(类型转换)可以被convert()替换,他们是等价的。