【问题标题】:Calculate variable of max amount in a group计算组中最大数量的变量
【发布时间】:2020-09-01 12:35:17
【问题描述】:

我在做以下练习时遇到了困难。我需要找出id 不是max_idamount 最多的组中的频率。这应该考虑到包含至少两个不同人的组。 数据来自两个不同的表:max_id 来自 table1(我称之为a)以及useramountid 来自 table2 (b) 以及组。 从上面的文字来看,条件应该是

(1) a.id<>b.max_id /* is not */
(2) people in group >=2
(3) a.id<> id of max amount

数据集看起来像

(一)

max_id  user  amount

(b)

group email

在之前的练习中,我必须按如下方式计算不同的人:

sel a.distinct users
a.max_id
b.id
from table1 as a
inner join table2 as b
on b.id=a.max_id

where
b.max_id is not null
and b.time is null

在上面的练习中不需要来自金额的信息。这是两个练习的主要区别,但结构和字段非常相似。 现在,我需要编辑上面的代码,以找出id 不是max_idamount 最多的组中的频率。仅当组具有至少两个不同的人/用户时,这才有意义。 我想我需要加入表格以获取组中最大数量的 id 并计算组中的人数,但我不知道该怎么做。 任何帮助将不胜感激。谢谢。

数据样本

max_id  user  amount id group email
12       1    -2000  12 house email1
312      1      0    54 work  email1
11       32    -213  11 house email32
41       13    -43   78 work  email13
312      53    -650  34 work  email53
1        67    -532  43 defense email67
64       76   -9650  98 work  email76

根据我的理解,根据上面的代码,练习所要求的内容,我应该在group 中找到id&lt;&gt;max_id 的值并且具有超过2 users 的值(即房屋、工作、防御)。 然后,我需要选择的是id &lt;&gt; id of max amount

我希望这可以更清楚一点。

【问题讨论】:

  • 样本数据和期望的结果真的很有帮助。
  • 我已根据您之前的问题发布了一个回答,希望对您有用
  • 谢谢@scaisEdge。我刚刚完成更新问题。我不知道这是否会导致您的答案发生变化。我试图尽可能地解释这个问题。感谢您的帮助。
  • 您的问题似乎与我的答案无关,所以过了几分钟我删除了答案.. 无论如何您的问题还不清楚.. 尝试添加适当的数据样本和预期结果
  • @sciasEdge 我更新了这个问题。我希望它可以更清楚。我不了解组的部分以及如何计算最大值

标签: sql teradata-sql-assistant


【解决方案1】:

假设你有一个查询

select t.User, m.Email, m.Model, m.Amount
from 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

您可以使用

获得每个 amoun 的最大 di
select max(id), Amount
from (

    select m.id, t.User, m.Email, m.Model, m.Amount
    from 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
) k  

你应该获得不等于最大id的id值

select mm.id, t.User, mm.Email, mm.Model, mm.Amount
    from my_table mm
    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
inner join  (
    select max(k.id) max_id, k.Amount
    from (

        select m.id, t.User, m.Email, m.Model, m.Amount
        from 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
    ) k

    ) kk ON kk.max_id <> mm.id

根据您的上一个示例,查询应该是

select m.*
from my_table
inner join  (
    select my_groups, count(distinct user)
    from my_table 
    group by my_groups
    having count(distinct user) >2
) t on t.my_group = m.my_group 
    and m.max_id <> m.id

PS 组是保留字,所以我使用 my_groups 作为列名

【讨论】:

  • 我更新了问题。我希望它可以更清楚。感谢您的帮助
  • 非常感谢您根据我的示例数据更新答案。只有一个问题:我从哪里选择最大金额的 id,即a.id&lt;&gt; id of max amount
  • 在你的示例中,max_id 是一个列值..所以你评论我不清楚..你是什么意思..(在我之前的代码示例中,max_id 来自子查询)
猜你喜欢
  • 1970-01-01
  • 2021-10-08
  • 2018-08-12
  • 2015-08-22
  • 1970-01-01
  • 1970-01-01
  • 2018-11-12
  • 2016-02-14
  • 2017-03-23
相关资源
最近更新 更多