计算组中最大数量的变量

Calculate variable of max amount in a group

我做下面的练习有困难。我需要找出 id 不是 amount 最多的组中的 max_id 的频率。考虑到至少包含两个不同人的组,应该这样做。 数据来自两个不同的表:max_id来自table1(我将其称为a)以及useramountid 来自表 2 (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 不是 amount 最多的组中的 max_id 的频率。只有当组至少有两个不同的 persons/users 时,这才有意义。 我想我需要加入表格来获取组中最大数量的 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

根据我的理解,根据上面的代码,我应该找到 id<>max_id 的值并且在 group 中有超过 2 users 的值(即房子,工作、防御)。 那么,我需要 select 的是 id <> id of max amount

希望这个能说的清楚一点。

假设你有一个查询

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

您可以使用

获得每个金额的最大 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 group 是一个保留字,所以我使用 my_groups 作为列名