[英]Combine multiple queries into one query
我正在嘗試按clientid
和m.id
。 如何將這2個查詢轉換為1個查詢?
查詢1
select cs.clientid, count(distinct(m.id)) as cp
into #temp
from call_table cs
join mem_table m
on cs.CLIENTID = m.clientid
join activity_table a
on a.memid = m.id
where a.activity = 'abc'
group by cs.clientid, m.id
查詢2
select clientid, sum(cp) from #temp
group by ClientId
更新
更具體地說,我希望在不使用臨時表的情況下編寫此查詢。
您只能按clientid分組
並且由於沒有選擇來自activity_table的字段,因此可以使用EXISTS代替。
select cs.clientid, count(distinct m.id) as cp
from call_table cs
join mem_table m on m.clientid = cs.clientid
where exists
(
select 1
from activity_table a
where a.memid = m.id
and a.activity = 'abc'
)
group by cs.clientid
你為什么不這樣寫:
with temp as (
select cs.clientid, count(distinct m.id) as cp
from call_table cs join
mem_table m
on cs.CLIENTID = m.clientid join
activity_table a
on a.memid = m.id
where a.activity = 'abc'
group by cs.clientid, m.id
)
select clientid, sum(cp)
from temp
group by ClientId;
我無法弄清楚邏輯究竟應該是什么,但這似乎是組合查詢的最簡單方法。
我推測您只需要此查詢:
select cs.clientid, count(distinct m.id) as cp
from call_table cs join
mem_table m
on cs.CLIENTID = m.clientid join
activity_table a
on a.memid = m.id
where a.activity = 'abc'
group by cs.clientid;
也就是說,通過將該m.id
從group by
刪除。 而這又可以簡化為:
select m.clientid, count(distinct m.id) as cp
from mem_table m join
activity_table a
on a.memid = m.id
where a.activity = 'abc'
group by cs.clientid;
假設m.id
是唯一且非NULL
,則可以進一步簡化為:
select m.clientid, count(*) as cp
from mem_table m join
activity_table a
on a.memid = m.id
where a.activity = 'abc'
group by cs.clientid;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.