zoukankan      html  css  js  c++  java
  • ETL工程师笔试题

    1、参考答案

    1)建表

    CREATE TABLE `ta` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `cx` varchar(20) DEFAULT NULL,
      `qy` varchar(20) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8;

    CREATE TABLE `tb` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `cx` varchar(20) DEFAULT NULL,
      `qy` varchar(20) DEFAULT NULL,
      `jg` int(11) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

    CREATE TABLE `tc` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `cx` varchar(20) DEFAULT NULL,
      `qy` varchar(20) DEFAULT NULL,
      `jg` int(11) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8;

    存储过程:

    DROP PROCEDURE IF EXISTS `query_a_and_b`;
    DELIMITER ;;
    CREATE PROCEDURE query_a_and_b() READS SQL DATA
    BEGIN
        DECLARE cxc varchar(20);
        DECLARE qyc varchar(20);
        DECLARE jgc INT;
        DECLARE s INT DEFAULT 0 ;
        DECLARE consume CURSOR FOR SELECT cx,qy,jg FROM tb;
    -- DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET num = 1;
        DECLARE CONTINUE HANDLER FOR NOT FOUND SET s=1;
        OPEN consume;
            FETCH consume into cxc,qyc,jgc;
            while s <> 1 DO
                if(qyc='全国')THEN
    INSERT INTO tc(cx,qy,jg)
    SELECT a.cx,b.qy,a.jg from tb a left JOIN ta b on b.cx=a.cx WHERE b.cx=cxc;
     ELSEif(qyc='其他')THEN
    INSERT INTO tc(cx,qy,jg)
    SELECT a.cx,b.qy,a.jg from tb a left JOIN ta b on b.cx=a.cx  WHERE a.qy=qyc and b.qy not in (
    select t.qy from tb t WHERE t.cx=b.cx
    );
    ELSE
    INSERT INTO tc(cx,qy,jg)
    SELECT a.cx,a.qy,a.jg from tb a WHERE a.cx=cxc and a.qy=qyc;
     END IF;
                FETCH consume into cxc,qyc,jgc;
            END WHILE;
        CLOSE consume;
    END;;
    DELIMITER;

    CALL query_a_and_b();

    结果:

    2、参考答案

    借用1题表tb,数据如下:

    sql如下:

    第一种:

    CREATE VIEW view_name AS
    SELECT a.COHEV,b.REIZ,a.jg from
    (select
    (case when cx = 'COHEV' then qy end) as COHEV,
    jg
    from tb) a JOIN  
    (select
    (case when cx = 'REIZ' then qy end) as REIZ,
    jg
    from tb) b  on a.jg = b.jg
    WHERE a.COHEV is not null AND b.REIZ is not null
    第二种:
    select max(COHEV) COHEV,max(REIZ) REIZ,jg from
    (select
    (case when cx = 'COHEV' then qy end) as COHEV,
    (case when cx = 'REIZ' then qy end) as REIZ,
    jg
    from tb)b GROUP BY jg;

    欢迎指正

    未完待续。。。。

  • 相关阅读:
    shell 从键盘读取输入时删除输入的字符
    spring boot 下 mapper接口与xml文件映射问题
    tcpdump
    Linux TCP自连接问题
    git commit 合并到指定分支
    工作教训总结
    git 撤销修改和版本回退
    Java 注解方式校验请求参数
    JVM 监控工具——jconsole
    排查Full GC
  • 原文地址:https://www.cnblogs.com/XiaoyangBoke/p/11232137.html
Copyright © 2011-2022 走看看