计算组中最大数量的变量
Calculate variable of max amount in a group
我做下面的练习有困难。我需要找出 id
不是 amount
最多的组中的 max_id
的频率。考虑到至少包含两个不同人的组,应该这样做。
数据来自两个不同的表:max_id
来自table1(我将其称为a
)以及user
和amount
; id
来自表 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 作为列名
我做下面的练习有困难。我需要找出 id
不是 amount
最多的组中的 max_id
的频率。考虑到至少包含两个不同人的组,应该这样做。
数据来自两个不同的表:max_id
来自table1(我将其称为a
)以及user
和amount
; id
来自表 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
您可以使用
获得每个金额的最大 diselect 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 作为列名