只保留金额最高的行
Keeping only rows with highest amount value
我想知道如何select拥有最多数量的用户及其对应的model.For每个用户我有很多电子邮件。
数据集看起来像
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 Assistant 中完成?
希望你的数据库允许加入子查询
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
在 Teradata 中,这通常使用 qualify
完成。如果您希望每个用户一行,数量最少:
select t.*
from t
qualify row_number() over (partition by user order by amount) = 1;
如果您希望每个用户一行,只需更改 partition by
。如果您想要最大值而不是最小值,您可以将 desc
添加到 order by
.
我想知道如何select拥有最多数量的用户及其对应的model.For每个用户我有很多电子邮件。 数据集看起来像
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 Assistant 中完成?
希望你的数据库允许加入子查询
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
在 Teradata 中,这通常使用 qualify
完成。如果您希望每个用户一行,数量最少:
select t.*
from t
qualify row_number() over (partition by user order by amount) = 1;
如果您希望每个用户一行,只需更改 partition by
。如果您想要最大值而不是最小值,您可以将 desc
添加到 order by
.