使用 matillion etl 中的窗口计算获得数量最高的前 3 个 ID

问题描述

我有一张看起来像这样的表格:

id |姓名 |数量 1 杰西 192$ 2 山姆 123 美元 3 史蒂夫 345 美元 4 乔希 234 美元 5 火腿 452$ 6 约翰 211$ 7 屈臣氏 111$ 8 埃米尔 143$ 9 里亚兹 311$ 10 帕纳格 139 美元 现在,我想要金额最高的前 3 个人的 id。我搜索了一些像窗口函数、聚合组件这样的东西,但我真的找不到我需要的东西。有人能帮我解决这个问题吗?

我希望结果看起来像

身份证金额 5 452$ 3 345 美元 9 311$

解决方法

您能否使用 Matillion 数据库查询组件简单地运行 SQL 命令 - 类似于以下示例中的 SELECT?

CREATE OR REPLACE TEMPORARY TABLE stacko_q 
AS
    SELECT 1 as id,'jesse' as nm,192 as amount UNION ALL
    SELECT 2 as id,'sam' as nm,123 as amount UNION ALL
    SELECT 3 as id,'steve' as nm,345 as amount UNION ALL
    SELECT 4 as id,'josh' as nm,234 as amount UNION ALL
    SELECT 5 as id,'hamish' as nm,452 as amount UNION ALL
    SELECT 6 as id,'john' as nm,211 as amount UNION ALL
    SELECT 7 as id,'watson' as nm,111 as amount UNION ALL
    SELECT 8 as id,'amir' as nm,143 as amount UNION ALL
    SELECT 9 as id,'riaz' as nm,311 as amount UNION ALL
    SELECT 10 as id,'panag' as nm,139 as amount;

SELECT id,amount
FROM (
  SELECT  id,amount,rank() OVER (order by amount desc) my_rank
  FROM stacko_q)
WHERE my_rank <= 3;

--  results - 3 rows
--  ID  AMOUNT
--  5   452
--  3   345
--  9   311

我希望这有助于...丰富

附言如果此(或其他)答案对您有帮助,请花一点时间“接受”有帮助的答案,方法是点击答案旁边的复选标记,将其从“变灰”切换为“已填写”。

,

需要用到rank组件,按数量排序,窗函数=行号。 然后将其输入过滤器组件,并选择行号