2020-03-01
创新互联建站主要从事网站建设、成都网站制作、网页设计、企业做网站、公司建网站等业务。立足成都服务印台,10年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18982081108
对于count的函数的使用,我们常见的一个错误是在括号内随意指定一个列去统计结果集的行数。但只有指定的行确实都是有值的时候,统计的才是实际的行数,否则可能统计的结果并不是实际的行数。而对于MyISAM存储引擎,如果某一列的值确实不可能为null时,MySQL内部就会将count()函数优化成count(*),若没有带where条件,此时计算速度是非常快的,因为此时没有实际的去计算表的行数。
总结: 对于MyISAM存储引擎,不带where条件的count(*)是非常快的。
技巧:
利用上述MyISAM的count(* )特性,加速一些特定查询条件的count()查询。
如:
对于select count(* ) from tablename where id 10; 可以做如下的反转查询:
select (select count(* ) from tablename) - count(* ) from tablename where id 10;
因为这样在查询阶段MySQL将子查询当做一个常数来处理,大大减少了扫描的行数。
1.字符串函数
char_lengt()
concat()
instr()
lcase()
left()
ltrim()
mid()
2.时间函数
now()
curdate()
curtime()
datediff()
date_add()
数学函数
abs()
ceiling()
floor()
pow()
rand()
round()
其他函数
md5()
version()
database()
UUID()
同一使用select 函数名(参数列表)
MySQL的窗口函数最主要作用是对数据进行分组操作(可以进行分组排序,求TopN,移动平均,聚合计算等),也就是相当于说在当前的详细级别视图里,对更低级别的数据进行计算呈现(可以与Tableau的表计算函数进行对比学习),比如说目前的表格是全国数据,但是要对不同省份的数据进行分组计算,这个时候使用窗口函数就会很方便。
在MySQL中,窗口函数要在8.0版本之后才能使用,如果是低版本的话,只能使用设置变量的方式完成以上内容的实现,设置变量在逻辑上会比窗口函数更加难以理解和使用,使用窗口函数可以大大的提高效率。
在很多SQL的教程中,说到窗口函数的时候,都只是说窗口函数的排序优势而已,但是在实际工作中,其用处远远不止这些。
以下为窗口函数的情况:
rand() 随机生成 0 - 1的浮点数 , 常与其他函数结合使用 ,比如 ceiling,floor,LPAD 等
如果要指定指定范围的随机整数的话,需要用这个公式FLOOR(i + RAND() * j),比如
# 生成 7 - 11的随机数 SELECT FLOOR(7 + (RAND() * 5));
floor 地板; 取小于该值的最大整数 ,比如 0
mysql select floor(1.23),floor(-1.23);
1 -2
ceiling 则相反,向上取整,取大于该值的最小整数 ,比如
SELECT CEILING(1.23); # 2
SELECT CEIL(-1.23); # -1
lpad 是左填充, 用法如下 :
LPAD(RAND()*31 + 1,2,'0')) # 取01-31的随机整数 ,保留两位,如果是一位,左边填0
调用如:select 函数名(参数列表)。
mysql中的UDF(自定义函数),可以写好一些方法或 函数,然后进行调用,而且是在SQL语句中可以进行调用。
DROP FUNCTION CalculateAmount
CREATE FUNCTION CalculateAmount(userid INT) RETURNS float(10,2)
BEGIN
DECLARE totalCredits FLOAT;
SELECT SUM(amount) INTO totalAmount FROM credit_user WHERE id =userid;
RETURN totalAmount;
END
要注意的是,在UDF中,不要定义与数据表中重名的列。而在SQL中, 则可以像SELECT CalculateAmount(1);那样去调用了。
方法/步骤
首先,计算字符串的字符数,可以用char_length()函数,代码如下:
select
'zhangsan',char_length('zhangsan');
如下图所示:
字符串中的length()函数,用来计算字符串的长度,代码如下:
select
'zhangsan',length('zhangsan1111');
如下图所示:
字符串函数
中有时需要将几个不同的字符串拼接在一起,这时可以利用concat(a1,a2,...)和concat_ws(b,b1,b2,...),可以将各字符串合并成一个字符串,代码如下:
select
concat('zhang','san','feng');
select
concat_ws('*','zhang','san','feng');
如下图所示: