一条sql 计算数据库表状态占比

一条sql 计算数据库表状态占比

周赒
2023-12-06 / 0 评论 / 20 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2023年12月06日,已超过351天没有更新,若内容或图片失效,请留言反馈。

1、需求:

统计一张表中状态不同情况的占比,如何使用一条sql 满足需求

2、分析:

需要使用的mysql的 CONCAT : 一般用法主要是用于拼接。例如:

  SELECT CONCAT('M','y','S','Q','L')

  MySQL

format()函数:将数据内容格式化的,可以将数据格式化为整数或者带几位小数的浮点数(四舍五入)。

  SELECT FORMAT(100.3111,0); // 取整 100
    
  SELECT FORMAT(100.7654,3);//四舍   100.765
    
  SELECT FORMAT(100.7655,3);//五入   100.766

case when语句 : 使用方法: mysql中也有像php语言中switch case 这样的语句

  select getdate() as 日期,case month(getdate()) 
  when 11 then '十一' 
  when 12 then '十二' 
  else substring('一二三四五六七八九十', month(getdate()),1) 
  end+'月' as 月份 

这个问题答案有很多种,这里只是象征提供一个参考,最终sql写法 :

  SELECT
    CONCAT( FORMAT( 100 * SUM( CASE WHEN ans_type = 0 THEN 1 ELSE 0 END )/ COUNT(*), 2 ), "%" ) AS `通过率`,
    CONCAT( FORMAT( 100 * SUM( CASE WHEN ans_type = 1 THEN 1 ELSE 0 END )/ COUNT(*), 2 ), "%" ) AS `算法拒绝`,
    CONCAT( FORMAT( 100 * SUM( CASE WHEN ans_type = 2 THEN 1 ELSE 0 END )/ COUNT(*), 2 ), "%" ) AS `模型超时` 
FROM
    chats_ans 
WHERE
    `create_time` >= '2023-10-04 16:42:25';
SELECT
    count(*) 
FROM
    chats_ans 
WHERE
    `create_time` >= '2023-10-04 16:42:25'
通过率算法拒绝模型超时
88.33%8.77%2.90%
0

评论 (0)

取消