zoukankan      html  css  js  c++  java
  • 分享一个工作中遇得到的sql(按每天每人统计拖车次数与小修次数)

    查询每人每天的数据

     首先先建表

    CREATE TABLE `user` (
    `name` varchar(255) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    CREATE TABLE `repair` (
      `name` varchar(255) DEFAULT NULL,
      `repair_num` varchar(255) DEFAULT NULL,
      `repair_second` varchar(255) DEFAULT NULL,
      `date` date DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    CREATE TABLE `talair` (
      `name` varchar(255) DEFAULT NULL,
      `talair_num` varchar(255) DEFAULT NULL,
      `talair_second` varchar(255) DEFAULT NULL,
      `date` date DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    CREATE TABLE `user` (
      `name` varchar(255) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

     插入测试数据:

     这个时间表也可以使用存储过程进行生成,有需要的请参考上一篇博客

     表数据建立好了,那么怎么使用mysql实现需求呢?

    先使用传统的inner join 与left join 试试

     

    inner join 的效果,显然这是将两张表数据相同数据进行连接,数据不准确,且没有按照时间去进行分组,时间统计不准确

    需要的效果是

     

    这样,但是需要去除笛卡尔积,按照人与时间进行分类

    由于第一张表有的数据,第二张表没有,且时间不同,那么现在就需要借助创建的user表与date表

    可以这样写:

    select * from user join date 
    left join repair on repair.name = user.name and date.date = repair.date
    left join talair on talair.name = user.name and date.date = talair.date;

    效果是:

    这样就查询出了张三这个人在9-17这天,进行了1次拖车1与4次小修,达到了按时间去分组查询每人每天数据的目的,且不会因为数据表不完全而导致数据丢失

    接下来就是去除产生的笛卡尔积,可以直接将为null的值排除

    SELECT
        *
        
    FROM
        USER JOIN date
        LEFT JOIN REPAIR ON REPAIR.NAME = USER.NAME 
        AND date.date = REPAIR.date
        LEFT JOIN talair ON talair.NAME = USER.NAME 
        AND date.date = talair.date 
    WHERE
        talair.talair_num IS NOT NULL 
        OR talair.talair_second IS NOT NULL 
        OR REPAIR.repair_num IS NOT NULL or REPAIR.repair_second is not null ;

     

    这其中有一点是非常重要的,就是user表与date表两个表完全不相关,是通过拖车与小修两张表进行的关联

     在写报表的过程中,通常是写周月日的统计,那么会先建立一张日维表或者月维表,但是却与主表不关联,只是作为一个时间字段展示,那么这种连接方式就

    显得尤为重要 

  • 相关阅读:
    TcpClient连接帮助类
    winform中添加管理员权限控制
    textbox中输入email做格式控制
    绑定和非绑定方法
    类的封装、property、多态和多态性
    继承类之点点滴滴
    爬虫日记-正则表达式
    爬虫日记-单元总结
    爬虫日记-最好大学排名实例
    爬虫日记-第一单元总结
  • 原文地址:https://www.cnblogs.com/huanghuanghui/p/9665701.html
Copyright © 2011-2022 走看看