统计sql: 总数、按条件统计总数 成功率
SELECT
date(create_time),
count(1),
count(IF(order_status = "SUCCESS",1,null)),
count(IF(order_status = "CLOSED" and order_close_reason = "REQUEST_CLOSE",1,null)),
count(IF(order_status = "CLOSED" and order_close_reason = "TIME_OUT_CLOSE",1,null)),
count(IF(order_status <> "SUCCESS" and order_status <> "CLOSED",1,null))
from table_name
WHERE
create_time >= '2023-02-01'
group by date(create_time);
2、统计成功率
SELECT
date(create_time),
count(1) as '总数',
count(IF(bind_status='SUCCESS',1,null)) as '成功数',
count(IF(bind_status='SUCCESS',1,null))/count(1) as '成功率'
FROM
表名
WHERE
create_time>'2023-06-10' GROUP BY date(create_time)
3、
流程控制的常见用法:
流程控制结构经常会结合聚合函数(如 count、sum 等)一起使用。 当然,也可单独使用,比如新增一个列值。
- IF(expr1, expr2, expr3)
如果 expr1 为 true (不为 0 和 NULL),则 IF() 的返回值为 expr2;否则,返回值为 expr3 。
示例:
SELECT count(IF(status='SUCCESS',1,null)) from table where create_time >CURDATE();
- IFNULL(expr1, expr2)
如果 expr1 为 NULL,则 IFNULL() 的返回值为 expr2;否则其返回值为 expr1 。
示例:
SELECT IFNULL(count(IF(status='SUCCESS' and close_status = 'NOT_CLOSE',1,null))/COUNT(1),0) from table where create_time >CURDATE();
- NULLIF(expr1, expr2)
如果 expr1 等于 expr2 成立,那么返回值为 NULL ;否则,返回值为 expr1 。
4、MySQL 中关于 count 和sum 函数的说明:
- count
count(*) 只要记录存在,就会进行计数。
count(col_name) 只有当字段 col_name 的值不为 null 时,才会进行计数。
count(1) 只要记录存在,就会进行计数,执行速度比 count(*) 要快。数值 1 可以用其他的任意数值替代,比如 0 或者 9 。
count(null) 的结果为 0,等同于 count(NULL) 。
count() 函数的结果不可能为 null,只会大于或等于 0。
- sum
sum(col_name) 对字段 col_name 进行求和。如果 col_name 的值为 null ,就会忽略;如果记录不存在,结果为 null ;如果所有记录的值都是 null ,结果为 null 。
sum(null) 的结果为 null 。
sum() 函数的结果可能为 null 。
5、
cast() 和 convert() 函数可以将 value 值,从当前数据类型转换为另一种数据类型。
SELECT NOW(),CAST(NOW() AS date),CONVERT(NOW(), date);