zoukankan      html  css  js  c++  java
  • 数据验证之查询统计数据

    我们做业务系统测试的时候,经常需要对页面展示的数据或后台传输的数据进行数据验证,即验证数据的正确性,本篇总结下测试过程中的常用的数据库查询统计的方法

    数据库:mysql

    1、简单的分组查询  group by

         如统计A表中不同车型vehicle_class的数量和交易金额

     SELECT COUNT(1) AS 总量,  SUM(CAST(IFNULL(fee, 0) * 0.01 AS DECIMAL (10, 2))) AS 总额, vehicle_class  FROM A 
     GROUP BY vehicle_class;

      解释:

       1)这里的金额fee字段是int类型,即数据库存的是单位分,页面显示需要转换单位元,且保留小数点后2位,decimal(10,2)可以存储8位整数2位小数的数字

       2)CAST是数据类型转换的函数,用法为:CAST(字段名 as 转换的类型 )

       3) IFNULL(fee,0),如果fee为NULL则为0,如果不为NULL则为具体的fee值

       结果如下:

       总量    总额     vehicle_class
    
       550    52808.00    3
    
       450    74000.00    4

    2、包含判断的统计  case when 

         如统计A表中不同车种的总量和总额,以及所有合计总数,总金额

         车种的需求为:当vehicle_class=1、2时,对应的车种为:小车; 当vehicle_class=3、4、5、6时,对应的车种为:客车;当vehicle_class=7、8、9时对应的车种为:货车

    SELECT 
    COUNT(1) AS 总量,
    SUM(fee) AS 总额,
    SUM((CASE WHEN a.vehicle_class IN (1,2) THEN 1 ELSE 0 END)) AS '小车数量',
    SUM((CASE WHEN a.vehicle_class IN (1,2) THEN fee ELSE 0 END)) AS '小车金额',
    SUM((CASE WHEN a.vehicle_class IN (3,4,5,6) THEN 1 ELSE 0 END)) AS '客车数量',
    SUM((CASE WHEN a.vehicle_class IN (3,4,5,6) THEN fee ELSE 0 END)) AS '客车金额', 
    SUM((CASE WHEN a.vehicle_class IN (7,8,9) THEN 1 ELSE 0 END)) AS '货车数量',
    SUM((CASE WHEN a.vehicle_class IN (7,8,9) THEN fee ELSE 0 END)) AS '货车金额'
     FROM A;

     结果如下:

    总量   总额  小车数量   小车金额    客车数量   客车金额    货车数量    货车金额
    3000  3000  1000      1000      1000      1000       1000      1000

    再比如用户表(t_user),统计不同用户类型(type)男女数量分别是多少

    SELECT  
    CASE 
    WHEN TYPE=1 THEN '超级管理员'
    WHEN TYPE=2 THEN '普通管理员'
    ELSE '其他'
    END '用户类型',
    COUNT(CASE WHEN sex='F' THEN '女性' END ) AS '女性数量',
    COUNT(CASE WHEN sex='M' THEN '男性' END ) AS '男性数量'
    FROM t_user
    GROUP BY TYPE

    结果如下:

    用户类型    女性数量    男性数量
    超级管理员   1         0
    普通管理员   150       300

    3、多表查询结果累计统计  union all

    如统计对应条件,不同状态的总量和总金额

    SELECT SUM(t.cnt), SUM(t.fee), t.st FROM (
     SELECT COUNT(1) AS cnt, SUM(amount) AS fee, order_status AS st
       FROM A
      WHERE ?
     GROUP BY order_status
     UNION ALL 
     SELECT COUNT(1) AS cnt, SUM(amount) AS fee, order_status AS st 
      FROM B
       WHERE ? 
     GROUP BY order_status
    ) t
        GROUP BY st;

    结果如下:

    SUM(t.cnt)    SUM(t.fee)    st
    100           23000         2
    200           54900         3
  • 相关阅读:
    解析ASP.NET Mvc开发之删除修改数据
    JavaScript module pattern精髓
    Remote验证及其改进(附源码)
    图模型的精确推理
    C#在泛型类中,通过表达式树构造lambda表达式
    类管理指针成员
    朴素贝页斯分类法
    使用Repository模式构建数据库访问层
    利用MVC的过滤器实现url的参数加密和解密
    在多线程中使用静态方法是否有线程安全问题
  • 原文地址:https://www.cnblogs.com/simple1025/p/11377802.html
Copyright © 2011-2022 走看看