6.7 多行转列查询

CONCAT(string A/col, string B/col…):返回输入字符串连接后的结果,支持任意个输入字符串; CONCAT_WS(separator, str1, str2,...):它是一个特殊形式的 CONCAT()。第一个参数剩余参数间的分隔符。分隔符可以是与剩余参数一样的字符串。如果分隔符是 NULL,返回值也将为 NULL。这个函数会跳过分隔符参数后的任何 NULL 和空字符串。分隔符将被加到被连接的字符串之间; COLLECT_SET(col):函数只接受基本数据类型,它的主要作用是将某字段的值进行去重汇总,产生array类型字段。

需求:

有数据:

把星座和血型一样的人归类到一起, 得到这样的结果:

射手座,A            大海|凤姐
白羊座,A            孙悟空|猪八戒
白羊座,B            宋宋

步骤1: 创建文件constellation.txt 存入数据

孙悟空    白羊座    A
大海         射手座    A
宋宋         白羊座    B
猪八戒    白羊座    A
凤姐         射手座    A

步骤2: 创建表, 并加装数据

create table person_info(
    name string, 
    constellation string, 
    blood_type string
) 
row format delimited 
fields terminated by "\t";
load data local inpath '/opt/module/datas/constellation.txt' into table person_info;

步骤3:按需求查询数据

select
    t1.base,
    concat_ws('|', collect_set(t1.name)) name
from
    (select
        name,
        concat(constellation, ",", blood_type) base
    from 
        person_info) t1
group by t1.base;

说明:

  • concat(a, b,...):返回输入字符串连接后的结果,支持任意个输入字符串; concat(constellation, ",", blood_type) 会把星座和血型用,连起来.

  • concat_set(col):函数只接受基本数据类型,它的主要作用是将某字段的值进行去重汇总,产生array类型字段。

  • cancat_ws(separator, str1, str2,...):它是一个特殊形式的 concat()。第一个参数是剩余参数间连接时的分隔符。分隔符将被加到被连接的字符串之间;

Copyright © 尚硅谷大数据 2019 all right reserved,powered by Gitbook
该文件最后修订时间: 2018-11-20 18:14:21

results matching ""

    No results matching ""