sql - 在一个 SQL 查询中加入两个 COUNT()

标签 sql oracle join

锁定。有disputes about this question’s content此时正在解决。它目前不接受新的答案或互动。








我有以下 Oracle SQL 查询:

SELECT ST.hrs_source_id, 
       TT.hrs_source_name, 
       Count(*) 
FROM   ps_hrs_app_profile P, 
       ps_hrs_rcmnt_sts S, 
       ps_hrs_al_log_srce ST, 
       ps_hrs_source TT 
WHERE  ST.hrs_source_id = TT.hrs_source_id 
       AND P.hrs_person_id = S.hrs_person_id 
       AND P.hrs_al_log_id = ST.hrs_al_log_id 
       AND S.status_code = '010' 
       AND S.status_dt BETWEEN '01-JAN-09' AND '31-MAR-16' 
GROUP  BY ST.hrs_source_id, 
          TT.hrs_source_name 
ORDER  BY TT.hrs_source_name ASC; 

上面的查询产生了 3 列的结果:HRS_SOURCE_ID , HRS_SOURCE_NAME , COUNT .但是我想加入两个COUNT s 成一个查询。第二个查询与上面相同,但只有 STATUS_CODE应该等于'060',而在第一个查询中它等于'010'。如何加入两个COUNT s 一起在一个查询中,所以总共将是 4 列?请帮忙解决。

最佳答案

您可以使用 case 表达式来获取不同的计数:

SELECT ST.HRS_SOURCE_ID, 
       TT.HRS_SOURCE_NAME, 
       COUNT(case when S.STATUS_CODE = '060' then 1 end) as cnt60, 
       count(case when S.STATUS_CODE = '010' then 1 end) as cnt10
FROM PS_HRS_APP_PROFILE P, PS_HRS_RCMNT_STS S, PS_HRS_AL_LOG_SRCE ST, PS_HRS_SOURCE TT
WHERE ST.HRS_SOURCE_ID = TT.HRS_SOURCE_ID
   AND P.HRS_PERSON_ID = S.HRS_PERSON_ID
   AND P.HRS_AL_LOG_ID = ST.HRS_AL_LOG_ID
   AND (S.STATUS_CODE = '010' or S.STATUS_CODE = '060')
   AND S.STATUS_DT BETWEEN '01-JAN-09' AND '31-MAR-16'
GROUP BY ST.HRS_SOURCE_ID, TT.HRS_SOURCE_NAME
ORDER BY TT.HRS_SOURCE_NAME ASC

注意 where 子句中的 OR。

您可能会更好地理解 sum 与 count 的结合:
sum(case when S.STATUS_CODE = '060' then 1 else 0 end) cnt60

为了解释查询中的情况,没有else .如果 status 不是 060,则 case 返回的值是 null . Null 不计入 count .

关于sql - 在一个 SQL 查询中加入两个 COUNT(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37045508/

相关文章:

sql - 我想使用 union all 进行插入,其中有一列从序列中获取值

MySQL连接3个表并在一张表中找到 "missing"行

sql - 如何更新 SQL Server 中 ntext 列中的 XML 字符串?

mysql - 搜索 MySQL 时忽略保存数据中的 HTML 标签

sql - BigQuery - 用于匹配已知字符串后的模式的正则表达式(正后向替代)

SQL全连接无任何条件

java - 使用触发器确保数据一致性

database - ORACLE - 连接到最近创建的数据库

Mysql连接:search with two tables

mysql - 连接具有 2 列表、第一列标题、第二列值的表