繁体   English   中英

使用子查询对特定行进行计数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM