修改密码

请输入密码
请输入密码 请输入8-64长度密码 和 email 地址不相同 至少包括数字、大写字母、小写字母、半角符号中的 3 个
请输入密码
提交

修改昵称

当前昵称:
提交

申请证书

证书详情

Please complete this required field.

  • Ultipa Graph V4

Standalone

Please complete this required field.

Please complete this required field.

服务器的MAC地址

Please complete this required field.

Please complete this required field.

取消
申请
ID
产品
状态
核数
申请天数
审批时间
过期时间
MAC地址
申请理由
审核信息
关闭
基础信息
  • 用户昵称:
  • 手机号:
  • 公司名称:
  • 公司邮箱:
  • 地区:
  • 语言:
修改密码
申请证书

当前未申请证书.

申请证书
Certificate Issued at Valid until Serial No. File
Serial No. Valid until File

Not having one? Apply now! >>>

ProductName CreateTime ID Price File
ProductName CreateTime ID Price File

No Invoice

搜索
    中文

      CASE

      分类映射函数 CASE 可以将多个数据列映射为一个新的列。映射时从第一个 WHEN 开始,按照每个 WHEN 中的条件对每行数据进行判断,一旦满足条件即输出对应的映射值,不再判断后面的 WHEN 或 ELSE。

      将多列映射为表格时需保证每列中的数据类型一致;本函数所涉及的关键词大小写不敏感。

      语法1:

      case
        when <condition1> then <projection1>
        when <condition2> then <projection2>
        ...
        else <other>
      end
      

      语法2:

      case <expression>
        when <value1> then <projection1>
        when <value2> then <projection2>
        ...
        else <other>
      end
      
      • <projectionN> 为数据满足条件 <conditionN>,或满足 <expression> 等于 <valueN> 时的映射表达式
      • <other> 为不满足任何条件时的映射表达式,不填写 ELSE 语句则默认为 0、空字符串等
      • 映射为点、边时取 UUID,映射为路径时取行号

      当多个数据列非同源时,在 WITH 中使用该函数时会先将非同源列做笛卡尔乘积后再计算,在 RETURN 中使用该函数时会直接将各列截为等长后再计算。

      映射为常量

      示例:将顾客按照 80后、90后、00后、其他分为四个年龄段,并统计各年龄段的人数

      find().nodes({@customer}) as nodes
      with CASE
      when year(nodes.birthday) <=> [1980, 1989] then "1980s"
      when year(nodes.birthday) <=> [1990, 1999] then "1990s"
      when year(nodes.birthday) <=> [2000, 2009] then "2000s"
      else "others" END as ageGroup
      group by ageGroup
      return ageGroup, count(ageGroup)
      

      示例:将上例用分类映射的简写格式进行改写

      find().nodes({@customer}) as nodes
      with CASE floor(year(nodes.birthday)/10)
      when 198 then "1980s"
      when 199 then "1990s"
      when 200 then "2000s"
      else "others" END as ageGroup
      group by ageGroup
      return ageGroup, count(ageGroup)
      

      映射为函数值

      示例:计算 2022 年每月的实际发薪日,已知每月 15 号为拟发薪日,如遇非工作日需顺延至下个星期一

      uncollect ["2022-1-15 0:0:0","2022-2-15 0:0:0","2022-3-15 0:0:0","2022-4-15 0:0:0","2022-5-15 0:0:0","2022-6-15 0:0:0","2022-7-15 0:0:0","2022-8-15 0:0:0","2022-9-15 0:0:0","2022-10-15 0:0:0","2022-11-15 0:0:0","2022-12-15 0:0:0"] as plan
      return CASE day_of_week(plan)
      when 1 then date_add(plan, 1, "day")
      when 7 then date_add(plan, 2, "day")
      else date_add(plan, 0, "day")
      END
      

      分析:上面 CASE 函数中的第一个条件将拟发薪日为星期日的时间向后偏移一天,第二个条件将拟发薪日为星期六的时间向后偏移两天,ELSE 将其余时间偏移 0 天。注意,ELSE 后不能直接写 plan,因为 plan 的数据类型为字符串,date_add() 的函数值的数据类型为时间,为了保持数据类型一致需要将 plan 通过 date_add() 函数转为时间类型。

      映射为别名

      示例:为因银行卡 CA001、CA002、CA005 各查找一条向外转账的一步路径,将每条路径统计为 [<卡号>, <金额>, <收款卡ID>];如果路径不存在则统计为 [<卡号>, 0, "none"]

      find().nodes({_id in ["CA001","CA002","CA005"]}) as cards
      optional n(cards).le({@transfer} as e).n({@card} as n).limit(1)
      return CASE n
      when 0 then [cards._id, 0, "none"]
      else [cards._id, e.amount, n._id] END
      

      分析:1)使用 optional 时,其后的模板查询语句的某一次执行如果无结果,则该次执行返回一条伪路径 0-0-0;2)用 CASE 筛选出伪路径 0-0-0 并将其映射为 [<卡号>, 0, "none"],将其余路径映射为表格 [<卡号>, <金额>, <收款ID>],注意表格各列需要保持统一的数据类型。

      请完成以下信息后可下载此书
      *
      公司名称不能为空
      *
      公司邮箱必须填写
      *
      你的名字必须填写
      *
      你的电话必须填写
      *
      你的电话必须填写