【问题标题】:Keeping only rows with highest amount value只保留金额最高的行
【发布时间】:2020-09-01 07:23:51
【问题描述】:

我想知道如何选择数量最多的用户及其对应的模型。对于每个用户,我有很多电子邮件。 数据集看起来像

User Email Model Amount
1    name1  1      -2000
1    name11 1      -300
1    name12 3      -7000
42   name2  13     -3200
42   name21 1      -3520
...

我只需要保留(用户电子邮件模型和数量)数量较多的行。由于该值为负数,因此我需要保留最慢的值(例如,用户 1 为 -7000)。

我如何在 SQL Teradata 助手中做到这一点?

【问题讨论】:

  • 你想要什么结果?每个模型或每个用户一行?负值使问题变得非常混乱。 -7000 是最小的数量,而不是最大的数量。

标签: sql teradata-sql-assistant


【解决方案1】:

希望你的数据库允许加入子查询

select t.User, m.Email, m.Model, m.Amount
gtom my_table m
inner join   (
    select user, max(amount) max_amount
    from my_table 
    group by user
) t on t.user = m.user
    and t.max_amount  = m.amount

【讨论】:

  • 嗨 scaisEdge。我认为你的回答可以工作。但是,我遇到了一些问题,因为用户和金额都来自连接另一个表(电子邮件)的表。怎么能 Inselect 最大数量的用户?
  • 解释得更好..你有两个具有相同最大(数量)的jser??那么你的 .. 预期结果 .. .. 最终更新您的问题并添加清晰的数据样本和相关的预期结果
  • 我开了一个新问题
【解决方案2】:

在 Teradata 中,这通常使用 qualify 完成。如果您希望每个用户使用最少的一行:

select t.*
from t
qualify row_number() over (partition by user order by amount) = 1;

如果您希望每个用户有一行,您只需更改 partition by。如果您想要最大的值而不是最小的值,您可以将desc 添加到order by

【讨论】:

    猜你喜欢
    • 2020-07-10
    • 2023-04-01
    • 1970-01-01
    • 2020-12-12
    • 1970-01-01
    • 1970-01-01
    • 2022-12-05
    • 2019-11-06
    • 1970-01-01
    相关资源
    最近更新 更多