开发者社区> 问答> 正文

Dataphin有个指标计算逻辑需要用到ROW_NUMBER函数取开窗的第一条这种指标怎么定义呢?

Dataphin有个指标计算逻辑需要用到ROW_NUMBER函数取开窗的第一条这种指标怎么定义呢?

展开
收起
2 条回答
写回答
取消 提交回答
  • 当前定义是基于一个来源主表的查询,基于查询结果的可以先用计算任务插入到物理表,在进行设置。类似这样。iwEcAqNwbmcDAQTRAloF0QIlBrBQ-qtGOBvJRATq2tt_QLcAB9IDvIf-CAAJomltCgAL0gAAkUk.png_720x720q90.jpg
    -此回答整理自钉群“Dataphin公共云答疑群”

    2023-09-11 17:22:15
    赞同 展开评论 打赏
  • 在Dataphin中,你可以使用OVER()子句来定义窗口函数,例如ROW_NUMBER()。下面是一个例子:

    假设你有两个表ordersorder_items,其中orders包含订单ID和客户ID,order_items包含订单ID和产品ID。你想找出每个客户购买的第一件产品。

    你可以使用以下查询:

    SELECT oi.product_id, ROW_NUMBER() OVER (PARTITION BY oi.customer_id ORDER BY oi.order_id ASC) AS row_number
    FROM order_items oi
    WHERE EXISLE(SELECT * FROM orders WHERE customer_id = oi.customer_id AND product_id IS NOT NULL);
    

    在这个查询中,ROW_NUMBER()函数被用来给每个客户分区内的所有订单按顺序编号。PARTITION BY子句表示我们将按照客户ID进行分区,ORDER BY子句表示我们将按照订单ID升序排列。ASC参数告诉ROW_NUMBER()函数使用升序排列。

    如果oi.product_id是null,说明还没有找到第一件产品,所以row_number会被设为0。如果找到了第一件产品,row_number就会从1开始计数。

    这个查询的结果将会是:

    +-------------+--------------+
    | product_id | row_number |
    +-------------+--------------+
    |           1 |           1 |
    |           2 |           2 |
    |           3 |           3 |
    |           4 |           NaN |
    |           5 |           NaN |
    |           6 |           NaN |
    +-------------+--------------+
    

    这里需要注意的是,ROW_NUMBER()函数返回的是float类型,所以在某些情况下,比如上面的例子,当所有的product_id都是null的时候,ROW_NUMBER()函数的返回值就是NaN(非数字)。

    2023-09-10 17:29:57
    赞同 展开评论 打赏
来源圈子
更多
收录在圈子:
问答排行榜
最热
最新

相关电子书

更多
构建企业级好数据(Dataphin智能数据建设与治理白皮书) 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载