[英]Using sub-query to count specific rows
我有一个用于报告的查询。 每行是包含病历的数据行,对每个病历重复client_id
。
我正在按client_id
分组并汇总其条件,但是我想使用子查询来查找高于预设分数的任何条件。 我当前的查询是给我整个表的总数,而不仅仅是给定的client_id
。
有人可以帮我吗? 谢谢!
这是我的查询:
select
DATEADD(month, DATEDIFF(month, 0, taken_on), 0),
client_id,
count(hscore),
sum(hscore),
(select count(hscore)
from amexmedscreen
where hscore >= '3.5')
from amexmedscreen
group by taken_on, client_id`
使用CASE
为相关行获取1
并将它们sum
就足够了:
select
...
sum(hscore),
sum(CASE WHEN hscore >= 3.5 THEN 1 ELSE 0 END)
group by taken_on, client_id`
您的子查询是一个单独的查询。 它不受主查询中发生的事情的限制。 您需要告诉它仅对外部查询中当前记录的client_id进行计数。 您将在两个不同的查询中两次引用同一个表,因此您必须为每个表使用不同的别名。
这样的事情应该起作用:
select DATEADD(month, DATEDIFF(month, 0, taken_on), 0),
client_id,
count(hscore),
sum(hscore),
(select count(hscore)
from amexmedscreen subq
where
hscore >= '3.5'
and subq.client_id = outerq.client_id )
from amexmedscreen outerq
group by taken_on, client_id
select DATEADD(month, DATEDIFF(month, 0, taken_on), 0),
client_id,
count(hscore),
sum(hscore),
tb1.COUNT_HSCORE
from amexmedscreen
INNER JOIN
(select client_id, count(hscore) as COUNT_HSCORE
from amexmedscreen
where hscore >= '3.5'
group by client_ID) as tb1
ON tb1.client_id = client id
group by taken_on, client_id,tb1.COUNT_HSCORE
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.