暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

hive sql(网友2)—— 统计两列中名称数,重复的算一次

大数据最后一公里 2021-09-08
1859

需求

    统计两列中名称数,重复的算一次


    建表语句

      create table wangyou2(
      name1 char(20),
      id int,
      name2 char(20)
      );


      数据

        insert into wangyou2 values 
        ("a",1,"a"),
        ("a",2,"a"),
        ("a",3,"b"),
        ("a",4,"c"),
        ("a",5,"d"),
        ("m",6,"a"),
        ("f",7,"a");


        实现

          select
          name,
          count(*)
          from(
          select name1 as name,id from wangyou2 where name1 = name2
          union all
          select name1 as name,id from wangyou2 where name1 != name2
          union all
          select name2 as name,id from wangyou2 where name1 != name2
          )tmp
          group by name


          结果

            #网友要求的结果
            a:7
            b:1
            c:1
            d:1
            f:1
            m:1


            #实现语句的结果
            +------+----------+
            | name | count(*) |
            +------+----------+
            | a | 7 |
            | b | 1 |
            | c | 1 |
            | d | 1 |
            | f | 1 |
            | m | 1 |
            +------+----------+
            6 rows in set (0.00 sec)


            分析

              思路:
              1、分段处理(确保每个分段子集组合在一起可以组合成结果集,主要保证不丢数据,不重复计算)
              2、找出左右相等的
              3、找出只有左边的
              4、找出只有右边的
              5、合并在一起


              扩展

                1、【优化】在每个union all子项中,可以先进行聚合,这样可以减少数据量


                知识点

                  1union all:all是参数,语法格式为union [all|distinct]。
                  distinct,删除结果集中重复的数据,all,返回所有结果集,包含重复数据。
                  默认情况下union已经删除了重复数据。




                  文章转载自大数据最后一公里,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                  评论