使用 SQL 分组并保留初始记录
Group Using SQL and Keeping Initial Records
我正在使用 GROUP BY 并拥有 select 一些有资格参加我们公司计划的消费者。我们基于消费者从与其关联的任意数量的帐户(一对多)中获得的余额。
下面是代码示例:
select consumerid,
sum(balanceonaccts) bal,
group_concat(accountid) accts
from accounts
join consumer
on consumer.consumerid = accounts.consumerid
group by consumerid
having bal > 300"
这为我提供了有关谁符合消费者级别资格的信息,但是,我能够识别合并满足余额的帐户的唯一方法是使用 group_concat()。
我想知道是否有一种方法可以识别那些账户合计满足余额标准的消费者,然后以某种方式将输出下移到账户级别。
当我尝试:
group by accountid
不包括单独账户达不到要求的余额但总和超过阈值的消费者。
我认为这符合您的要求:
select a.*
from accounts a join
(select a.consumerid, sum(balanceonaccts) as bal
from accounts a
group by a.consumerid
having bal > 300
) aa
on a.consumerid = aa.consumerid;
我认为您根本不需要 consumers
table,除非您希望从 table.
中获得某些特定字段
您已经拥有满足条件的 consumerid
组值,因此您可以将现有查询用作派生的 table 并再次加入 accounts
以获得帐户:
select
a.consumerid,
a.accountid,
a.balanceonaccts,
ba.bal
from
accounts a
inner join (
select
ac.consumerid,
sum(ac.balanceonaccts) bal
from
accounts ac
inner join consumer co on
co.consumerid = ac.consumerid
group by
ac.consumerid
having
bal > 300
) ba on ba.consumerid = a.consumerid
order by
a.consumerid,
a.accountid
我正在使用 GROUP BY 并拥有 select 一些有资格参加我们公司计划的消费者。我们基于消费者从与其关联的任意数量的帐户(一对多)中获得的余额。
下面是代码示例:
select consumerid,
sum(balanceonaccts) bal,
group_concat(accountid) accts
from accounts
join consumer
on consumer.consumerid = accounts.consumerid
group by consumerid
having bal > 300"
这为我提供了有关谁符合消费者级别资格的信息,但是,我能够识别合并满足余额的帐户的唯一方法是使用 group_concat()。
我想知道是否有一种方法可以识别那些账户合计满足余额标准的消费者,然后以某种方式将输出下移到账户级别。
当我尝试:
group by accountid
不包括单独账户达不到要求的余额但总和超过阈值的消费者。
我认为这符合您的要求:
select a.*
from accounts a join
(select a.consumerid, sum(balanceonaccts) as bal
from accounts a
group by a.consumerid
having bal > 300
) aa
on a.consumerid = aa.consumerid;
我认为您根本不需要 consumers
table,除非您希望从 table.
您已经拥有满足条件的 consumerid
组值,因此您可以将现有查询用作派生的 table 并再次加入 accounts
以获得帐户:
select
a.consumerid,
a.accountid,
a.balanceonaccts,
ba.bal
from
accounts a
inner join (
select
ac.consumerid,
sum(ac.balanceonaccts) bal
from
accounts ac
inner join consumer co on
co.consumerid = ac.consumerid
group by
ac.consumerid
having
bal > 300
) ba on ba.consumerid = a.consumerid
order by
a.consumerid,
a.accountid