精华内容
下载资源
问答
  • 在进行数据分析的时候,往往需要把数据表格中的多值列拆分成二值列。如图1中的表A所示,fruits为一个多值列,值可以是不同的水果名字,表明某个以ID作为标识的人吃水果的记录。现在的需求是要把是否吃了什么具体水果...

    在进行数据分析的时候,往往需要把数据表格中的多值列拆分成二值列。如图1中的表A所示,fruits为一个多值列,值可以是不同的水果名字,表明某个以ID作为标识的人吃水果的记录。现在的需求是要把是否吃了什么具体水果拆成多个列,最终如表B所示。在这个例子中,吃水果的记录还有重复,所以需要把重复的记录去掉。

    具体来说,可以将这个任务拆分成多个步骤,由不同的SQL select语句完成。如图2所示。这儿使用的数据库是DB2。


    图1


    图2

    1. 拆分列

    从表A到A1的过程重点是需要将每一行中的水果名字转化成相应新列的0/1值。

    select id, INSTR(fruits, 'apple') as apple, INSTR(fruits, 'banana') as banana
      from A;


    2. 去重

    可以看到,id为3的记录重复出现了。因此需要用group by去掉重复的。这次的查询是基于上一次的结果,因此我们用with将上一次的查询包含进来。

    with q1 as (
      select id, INSTR(fruits, 'apple') as apple, INSTR(fruits, 'banana') as banana
      from A
    )
    select *
      from q1
      group by id, apple, banana;


    3. 整合行

    A2中,id为2的记录出现了2次,可以把相应的列的值整合起来。同样用with将第二次的查询包含进来。

    with q1 as (
      select id, INSTR(fruits, 'apple') as apple, INSTR(fruits, 'banana') as banana
      from A
    ), q2 as (
      select *
      from q1
      group by id, apple, banana
    )
    select id, sum(apple) as apple, sum(banana) as banana
      from q2
      group by id;



    展开全文
  • YDB功能解析之多值列

    2018-04-08 11:37:37
    如果我们想要在一个列中存放多个值,使用多值列是一个不错的方式,通过多值列,我们可以将各种多个数据按照各种分隔方式存储到YDB中进行检索YDB多值列的特性:1.无序性 :YDB返回的多值列中的数据是无序的2.排重性:...

    如果我们想要在一个列中存放多个值,使用多值列是一个不错的方式,通过多值列,我们可以将各种多个数据按照各种分隔方式存储到YDB中进行检索

    YDB多值列的特性:

    1.无序性 :YDB返回的多值列中的数据是无序的

    2.排重性:YDB返回的数据会经过排重

    3.可分组统计:YDB支持使用分词列做分组统计

    4.可规避空值:如果传递的数据为空值,则会当做null处理

    • 生成测试数据
     hadoop fs -rm -r /data/example/quickstart/
     hadoop fs -mkdir -p /data/example/quickstart/
     hadoop jar ./lib/ydb-1.2.1-pg.jar cn.net.ycloud.ydb.server.reader.kafka.MrMakeShuData 30000000  /data/example/quickstart/1.txt
    • 创建数据表

    由于原始数据中多值列数据只有一列,所以我们这里创建一个HIVE  表关联源数据,并通过hive表与YDB表的对应关系导入多列多值列数据

    CREATE external  table ydb_import_txt_multyvalue( 
    phonenum string, usernick string, ydb_sex string, ydb_province string, ydb_grade string, ydb_age string, ydb_blood string, ydb_zhiye string, ydb_earn string, ydb_prefer string, ydb_consume string, ydb_day string, amtdouble double,amtlong bigint,content string,multyvalue string
    )
    row format delimited fields terminated by ',' 
     location '/data/example/quickstart/';
    • 创建YDB表(多值列测试表)
    create ydbtable ydb_example_shu_multyvalue(
    phonenum haoma,
    usernick string,
    ydb_sex string,
    ydb_province string,
    ydb_grade string,
    ydb_age string,
    ydb_blood string,
    ydb_zhiye string,
    ydb_earn string,
    ydb_prefer string,
    ydb_consume string,
    ydb_day string,
    amtdouble tdouble,
    amtlong tlong,
    content simpletext,
    multyvalue_string y_string_idm,
    multyvalue_tlong y_tlong_idm,
    multyvalue_long y_long_idm,
    multyvalue_tdouble y_tdouble_idm,
    multyvalue_double y_double_idm
    )
    • 导入测试数据
    insert overwrite table  ydbpartion 
    select 'ydb_example_shu_multyvalue', '3000w', '',
        YROW(
            'phonenum',phonenum,
            'usernick',usernick,
            'ydb_sex',ydb_sex,
            'ydb_province',ydb_province,
            'ydb_grade',ydb_grade,
            'ydb_age',ydb_age,
            'ydb_blood',ydb_blood,
            'ydb_zhiye',ydb_zhiye,
            'ydb_earn',ydb_earn,
            'ydb_prefer',ydb_prefer,
            'ydb_consume',ydb_consume,
            'ydb_day',ydb_day,
            'amtdouble',amtdouble,
            'amtlong',amtlong,
            'content',content,
            'multyvalue_string',multyvalue,
            'multyvalue_tlong',multyvalue,
            'multyvalue_long',multyvalue,
            'multyvalue_tdouble',multyvalue,
            'multyvalue_double',multyvalue
        )
    from ydb_import_txt_multyvalue;

    在上面的sql中我们指定了YDB表字段和HIVE表字段的对应关系,我们可以看到HIVE的 multyvalue 列指定了五个YDB字段的对应关系。

    • 多值列数据预览

    我们可以看到在上图中查询了五种数据类型的多值列,其中string类型的多值列返回的是经过排重的数据

    • 多值列group by

    在上面的sql中我们指定了multyvalue_long字段进行分组,ydb将每行中的值按照空格分隔,并将数据进行分组统计

    • 多值列与普通列group by

    在上图中我们使用了long类型多值列与string类型普通列来进行分组统计

    • 多值列与多值列 group by

    以上是使用两组多值列进行分组统计,由于结果中含有笛卡尔积的关系会使用大量内存且会影响到查询性能,建议慎重使用

    • 查询空及非空值

    导入一些含有空值的数据

    insert into table  ydbpartion 
    select 'ydb_example_shu_multyvalue', 'nulltest', '',
        YROW(
            'phonenum',phonenum,
            'usernick',usernick,
            'ydb_sex',ydb_sex,
            'ydb_province',ydb_province,
            'ydb_grade',ydb_grade,
            'ydb_age',ydb_age,
            'ydb_blood',ydb_blood,
            'ydb_zhiye',ydb_zhiye,
            'ydb_earn',ydb_earn,
            'ydb_prefer',ydb_prefer,
            'ydb_consume',ydb_consume,
            'ydb_day',ydb_day,
            'amtdouble',amtdouble,
            'amtlong',amtlong,
            'content',content,
            'multyvalue_string','',
            'multyvalue_tlong','',
            'multyvalue_long','',
            'multyvalue_tdouble','',
            'multyvalue_double',''
        )
    from ydb_import_txt_multyvalue limit 10000;

    查看 is null 的数据


    查看非空的数据


    • 数据检索

    数据检索


    不等于查询


    • 分词类型的多值列

    创建一个新表覆盖之前的测试表

    create ydbtable ydb_example_shu_multyvalue(
    phonenum haoma,
    usernick string,
    ydb_sex string,
    ydb_province string,
    ydb_grade string,
    ydb_age string,
    ydb_blood string,
    ydb_zhiye string,
    ydb_earn string,
    ydb_prefer string,
    ydb_consume string,
    ydb_day string,
    amtdouble tdouble,
    amtlong tlong,
    content simpletext,
    multyvalue_string y_string_idm,
    multyvalue_tlong y_tlong_idm,
    multyvalue_long y_long_idm,
    multyvalue_tdouble y_tdouble_idm,
    multyvalue_double y_double_idm,
    multyvalue_dblike y_dblike_ism
    )

    在上面的sql中,我们在最后一行添加了[multyvalue_dblike y_dblike_ism]字段,这是一个分词类型多值列字段,截止至YDB 1.2.1版本,行存储多值列仅支持分词类型,且分词类型多值列不支持列存储。

    接下来我们导入数据看一下


    默认YDB分词类型多值列展示是使用[]括起来的,如果想要返回如


    这样的数据的话需要在sql中添加 and ydbkv ='ydb.globel.env:fh' 参数

    例如:

    select multyvalue_dblike  from   ydb_example_shu_multyvalue where ydbpartition='multyvalue_dblike' and ydbkv ='ydb.globel.env:fh'  limit 10
    

    分词类型多值列模糊检索



    上图的sql中我们可以看到multyvalue_dblike查到的仅是含有1的数据,为了缩小命中范围我们将检索条件中添加正则进行过滤


    在上面的SQL中我们通过正则查询了开头是1的数据,使得命中效率要高于不加正则条件时的模糊检索。

    结论:在分词类型的多值列中,使用正则可以更加有效的过滤掉不需要的数据。


    对于YDB多值列以及YDB其他功能如果您有其他的疑问,见解和看法,欢迎您联系我们

    QQ:1003906673

    phone:17624021416

    WeChat:







    展开全文
  • sql 刷题1、多值列拆分成二值 1、多值列拆分成二值 -- (1) 拆分列 SELECT id, INSTR(fruits, 'apple') AS apple, INSTR(fruits, 'banana') AS banana FROM consume_fruits; -- (2)去重 distinct/group by -- (3) ...

    1、多值列拆分成二值

    在这里插入图片描述
    在这里插入图片描述

    -- (1) 拆分列
    SELECT id, INSTR(fruits, 'apple') AS apple, INSTR(fruits, 'banana') AS banana
    FROM consume_fruits;
    
    -- (2)去重 distinct/group by
    -- (3) 求和
    SELECT t.id, SUM(apple) AS apple, SUM(banana) AS banana
    FROM (SELECT s.*
    	FROM (SELECT id, INSTR(fruits, 'apple') AS apple, INSTR(fruits, 'banana') AS banana
    		FROM consume_fruits) s
    	GROUP BY s.id, s.apple, s.banana) t
    GROUP BY t.id;
    
    
    展开全文
  • 直接从某一查询出最大...样本数据如下:key_idxyzA123B552C471D338求查询每个key的最大,展示结果如下:key_idcolA3B5C7D8方案一:对于数不是很的可以用case when语句,select key_id,case whencase when x ...

    直接从某一列查询出最大值或最小值很容易,通过group by字句对合适的列进行聚合操作,再使用max()/min()聚合函数就可以求出。

    样本数据如下:

    key_id

    x

    y

    z

    A

    1

    2

    3

    B

    5

    5

    2

    C

    4

    7

    1

    D

    3

    3

    8

    求查询每个key的最大值,展示结果如下:

    key_id

    col

    A

    3

    B

    5

    C

    7

    D

    8

    方案一:

    对于列数不是很多的可以用case when语句,

    select key_id,

    case when

    case when x > y then x else y end < z then z

    else case when x < y then y else x end

    end as gre

    from sherry.greatests

    方案二:

    如果有4列,5列可以先转为行数据再用聚合函数求,

    select key_id, max(col) from

    (select key_id, x as col from sherry.greatests

    union all

    select key_id, y as col from sherry.greatests

    union all

    select key_id, z as col from sherry.greatests) as foo

    group by key_id

    展开全文
  • 关于垂直转成水平行 declare @dpmc varchar(100) select @dpmc=coalesce(@dpmc+','+a.khmc,a.khmc) from (select khmc from kehu)...多列值转合并成单列(查询中要把各数据类型转换成一致后拼接) sel
  • pandas DataFrame 根据多列做判断,生成新的列值

    万次阅读 多人点赞 2018-03-06 21:49:51
    环境:Python3.6.4 + pandas 0.22主要是DataFrame.apply函数的应用,如果...如代码所示,判断如果城市名中含有ing字段且年份为2016,则新test赋为1,否则为0.import numpy as np import pandas as pd data = ...
  • 业务开发中由于数据库设计有缺陷, 导致一个中存储了。这种情况下,在业务开发过程中, 需要将转换为行。进行操作。 如: image.png Goole 得: select a.ID,substring_index(substring_index(a.app_...
  • 1. 逐行处理,当指定多列满足一定条件时,取这几列的最大作为该行的新列值. 2. 将日期划分为上、中、下旬并作为新 代码 1.按col_night,col_day,col_whole三生成标志字段rs_flag,并取它们的最大...
  • Oracle 行转pivot 中存放

    千次阅读 2017-08-10 09:42:13
    Oracle 行转pivot 中存放
  • 替换多列空值,每替换不同: df.lie1.fillna(10, inplace=True) df.lie2.fillna(100, inplace=True)
  • 按照某一排序 d = {'A': [3, 6, 6, 7, 9], 'B': [2, 5, 8, 0, 0]} df = pd.DataFrame(data=d) print('排序前:\n', df) ''' 排序前: A B 0 3 2 1 6 5 2 6 8 3 7 0 4 9 0 ''' res = df.sort_val...
  • SQL多列查询最大

    2018-08-28 11:53:00
    直接从某一查询出最大或最小值很容易,通过group by字句对合适的进行聚合操作,再使用max()/min()聚合函数就可以求出。 样本数据如下: key_id x y z A 1 2 3 B 5 5 2 C 4 ...
  • 大家平时在查询数据的时候,肯定会遇到需要将一变成一行; 第一种情况:显示在同一行的同一上 1、新建一个表test 可以参考:https://blog.csdn.net/heqiang525/article/details/90210326 里面的建表...
  • Oracle从多列值中取有&NVL函数

    千次阅读 2019-01-17 10:41:46
    含义是:如果oracle第一个参数为空那么显示第二个参数的,如果第一个参数的不为空,则显示第一个参数本来的。 例如: SQL> select ename,NVL(comm, -1) from emp;   ENAME NVL(COMM,-1) -----...
  • EXCELsheet列值比对

    2018-11-24 22:40:25
    EXCELsheet链接
  • 将一合并成一行并用逗号分割 效果 sql语法: mysql写法: --默认的逗号分隔 select GROUP_CONCAT(A.title) as citys from tmpcity A; --用空格分隔 select GROUP_CONCAT(A.title SEPARATOR ...
  • 一.遇到的问题描述: 我遇到问题的数据比较复杂,下面以比较简单的数据为例说明问题,所以这些数据的含义是没有意义的,可以忽略数据的的具体意义。数据如下所示: import numpy as np import pandas as pd ...
  • 在表中有一个,但是不知道在哪一中,如何查询包含该的特定的数据呢?可能听得不是太明白,看下面的例子! 方案 1.创建表 -- Create a table create table tbl_test (id int identity(1,1), column1 ...
  • 【Hive】多列最大 或 数组最大

    万次阅读 2018-11-08 09:39:03
    当我们想要对多列同行之间进行比较时,可以尝试以下办法: 1.先将数值转换成数组array(),再对数组排序sort_array(),通过负值使其为降序; select -sort_array(array(-a,-b,-c))[0] as max_value from ( select...
  • 例如: CLARK WORKS AS A MANAGER KING WORKS AS A CLERK 在数据库中CLARK,KING在数据表中的...来自不同 DB2,Oracle,PostgreSQL 在这些数据库中使用双竖线作为连接运算符。 select
  • easyui-datagrid 根据多列计算另一个 实时计算(onChange) numberbox的复合性
  • SQLServer一行多列求最大

    千次阅读 2016-08-16 21:26:41
    SQLServer行多列求最大
  • 一、根据某列值为key,整合其他列值 直接上例子: import pandas as pd import numpy as np df1 = pd.DataFrame({'key': ['b', 'b', 'a', 'c', 'a', 'a', 'b'], 'data1': range(7)}) df1 整合,根据key,...
  • linq 多列分组取某最大

    千次阅读 2017-10-12 13:32:07
    string[] Names = new string[] { "张三1", "张三2", "张三3", "张三4", };  List Users = new List();  Random rd = new Random();  for (int i = 0; i  {  
  • sql查询一个字段多列值合并为一

    千次阅读 2019-03-27 16:22:00
    SELECT GROUP_CONCAT(A.字段) AS 字段别名 FROM ...字段='字段' AND a.字段 IN (1,2,3) SELECT GROUP_CONCAT(A.字段) AS 字段FROM 表名 A 转载于:https://www.cnblogs.com/yanchaohui/p/10608415.html...
  • SQL SERVER 多列的最大,最小值,平均一次性查询 可以指定多列,其类型要一致,可以求其最大,最小值,平均等等。 采用 cross apply 关联字。具体如下: select a.f0000,F0008,F0009,F0010,F0011,F0012,f...
  • 说明:1、lookup_type /lookup_value 分别为“值列类型表”和“值对应值表”  2、如再有更列要置换只需在后添加  left join (lookup_type t left join lookup_value v on t.lookup_type_id = v.lookup_...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 20,134
精华内容 8,053
关键字:

多值列