【问题标题】:Select TOP 1000 + custom user id's选择 TOP 1000 + 自定义用户 ID
【发布时间】:2023-03-29 17:03:01
【问题描述】:

除了自定义的用户 ID 列表之外,我还想根据收入选择前 1000 个用户 ID(这些不属于前 1000 名)

换句话说,我希望在 1 个查询中包含以下查询:

SELECT TOP 1000 * FROM XX
ORDER BY REVENUE DESC

SELECT * FROM XX
WHERE USER_ID IN (CUSTOM_LIST)

【问题讨论】:

    标签: teradata teradata-sql-assistant


    【解决方案1】:

    您需要一个 Union,但由于 TOP 不允许在 Set-Select 中使用,您必须将其嵌套在派生表中:

    SELECT *
    FROM
     (
       SELECT TOP 1000 * FROM XX
       ORDER BY REVENUE DESC
     ) as dt
    
     UNION
      -- UNION ALL is more efficient, but a user from the custom list who is 
      -- also in the top 1000 would be returned twice
    
    SELECT * FROM XX
    WHERE USER_ID IN (CUSTOM_LIST)
    

    【讨论】:

    • 当我按收入订购时,我会得到重复的用户 ID,因为我是在日级别进行汇总的。如何在没有重复用户 ID 的情况下获得前 1000 名?
    • @StephenTheunissen:你必须在 Top 之前申请 Distinct。您的实际 Select 看起来如何,可能不是 select *
    • Top N 语法错误:DISTINCT 选项不支持 Top N 选项。我也想过,但似乎没有用。选择 DAY、WEEK、MONTH、USER_ID、REVENUE 和一系列其他指标。
    • @StephenTheunissen:Distinct 在这种情况下无济于事(需要再次嵌套)。当多次返回相同的 USER_ID 时,应该返回哪一行,最高的还是最早/最新的?收入是聚合的结果还是列的结果?
    • 解决了这个问题,你的回答对我帮助很大!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-17
    • 1970-01-01
    • 2020-09-03
    • 1970-01-01
    • 2013-07-21
    • 1970-01-01
    相关资源
    最近更新 更多