mysql统计(2)- 常用的统计函数

mysql统计(1)- 常见的时间范围和时间维度统计
mysql常用的日期和时间格式化选项

1.count()函数

1.1 count(*)

计算符合结果集的行数,包括NULL和非NULL值

SELECT COUNT(*) FROM biz_api_record ar;

1.2 count(column_name)

计算特定列中非NULL的数量

SELECT COUNT(ar.id) as totalRequests FROM biz_api_record ar;

1.3 配合distinct

// 统计请求不成功的状态数量
SELECT COUNT(DISTINCT IF(ar.status!='200', ar.status, NULL)) as nonSuccessStatusCount 
FROM biz_api_record ar;

1.4 与其他函数配合示例

// 统计不为空字符串的数量
SELECT count(if(LENGTH(ar.upstream_addr) > 0,ar.upstream_addr,NULL)) as forwardCount 
FROM biz_api_record ar;

2.sum()函数

对特定的列求和,如果sum()的列中没有任何值,或者所有值都是NULLl,则结果会返回NULL而不是0,如果列中有一个非NULL值,则会忽略NULL值并返回总和

SELECT sum(ar.count) as forwardCount 
FROM biz_api_record ar;

与其他函数配合使用

SELECT ifnull(SUM(IF(ar.status='200', 1, 0)),0) as successCount
FROM biz_api_record ar;

3.avg()

返回列的平均值,返回的数据类型为DOUBLE,会忽略列中的NULL

-- 计算学生平均分
SELECT AVG(score) FROM students;

4.max()

返回列中的最大值,会忽略NULL

-- 获得最高分
SELECT MAX(score) FROM students;

5.min()

返回列中的最小值,会忽略NULL

-- 获得最低分
SELECT MIN(score) FROM students;

6.round()

语法:ROUND(number, decimals)
number: 需要四舍五入的值
decimals(可选):返回结果的小数位数。如果省略,数值将四舍五入到最接近的整数。

-- 四舍五入到整数
SELECT ROUND(12.56);   -- 结果: 13
SELECT ROUND(12.46);   -- 结果: 12
-- 四舍五入到指定小数位
SELECT ROUND(12.5678, 2);   -- 结果: 12.57
SELECT ROUND(12.5634, 2);   -- 结果: 12.56
-- 使用负数作为小数位:
SELECT ROUND(1234.5678, -2);  -- 结果: 1200

注意事项

  1. decimals 参数被省略时,ROUND() 函数将四舍五入到最接近的整数。
  2. 使用负数作为 **decimals **参数可以将数值四舍五入到最近的10、100、1000等。
  3. ROUND() 函数返回的结果具有与传递给函数的数值相同的数据类型。
  4. 如果传递给 ROUND() 的数值是 NULL,那么函数的返回值也是 NULL

7.if()

语法:IF(condition, value_if_true, value_if_false)

  • condition: 要测试的条件。
  • value_if_true: 如果条件为真,则返回的值。
  • value_if_false: 如果条件为假,则返回的值。
SELECT IF(1>0, 'True', 'False');   -- 结果: 'True'

8.ifnull()

语法:IFNULL(value, value_if_null)

  • value: 要检查的值。
  • value_if_null: 如果 valueNULL,则返回的值。
SELECT IFNULL(NULL, 'Default Value');   -- 结果: 'Default Value'
SELECT IFNULL('Hello', 'Default Value');   -- 结果: 'Hello'

9.混合使用示例

SELECT
			ac.id,
			ac.api_name,
			COUNT(ar.id) as totalRequests,
			ifnull(SUM(IF(ar.status='200', 1, 0)),0) as successCount,
			ifnull(ROUND(SUM(IF(ar.status='200', 1, 0))/COUNT(ar.id) * 100,2),0.00) as successRate,
			COUNT(DISTINCT IF(ar.status!='200', ar.status, NULL)) as nonSuccessStatusCount ,
			count(if(LENGTH(ar.upstream_addr) > 0,ar.upstream_addr,NULL)) as forwardCount,
			ifnull(SUM(IF(ar.upstream_status='200', 1, 0)),0) as forwardSuccessCount,
			ifnull(ROUND(SUM(IF(ar.upstream_status='200', 1, 0))/count(if(LENGTH(ar.upstream_addr) > 0,ar.upstream_addr,NULL)) * 100,2),0.00) as forwardSuccessRate,
			IFNULL(ROUND(avg(ar.request_total_time),3),0.000) as  avgRequestTime,
			IFNULL(ROUND(max(ar.request_total_time),3),0.000) as  maxRequestTime,
			IFNULL(ROUND(min(ar.request_total_time),3),0.000) as minRequestTime,
		FROM biz_api_config ac
		left JOIN biz_api_record ar  ON ar.api_code = ac.api_code
		where ac.del_flag = 0
		group by ac.id,ac.api_code

人_生或许就是一具皮囊打包,携带着一颗心的羁旅 – 《皮囊》_

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值