编写SQL查询以查找具有相应值的列的计数

时间:2017-11-01 15:38:43

标签: sql oracle

我正在尝试编写一个查询来获取有关列的条目的计数,该列也在整个表中具有匹配的相应列值。

澄清,例如,这个人的表,联系他们的方式,以及联系方式

|PERSON_ID | CONTACT_TYPE | CONTACT_DETAIL|
| 1        | PHONE        | 123-4567      |
| 2        | FAX          | 234-5678      |
| 1        | FAX          | 345-6789      | 

现在,假设我想找到电话号码为X且传真号码为y的人数。有没有办法做到这一点?

2 个答案:

答案 0 :(得分:0)

一种方法是使用聚合来获取人ID:

select person_id
from t
where (contact_type, CONTACT_DETAIL) IN ( ('PHONE', X), ('FAX', Y) )
group by person_id
having count(*) = 2;  -- assumes no duplicates

要获得总计数,请使用子查询:

select count(*)
from (select person_id
      from t
      where (contact_type, CONTACT_DETAIL) IN ( ('PHONE', X), ('FAX', Y) )
      group by person_id
      having count(*) = 2
     ) p;  -- assumes no duplicates

如果某人可以有两个电话号码或传真号码,请在上述查询中使用count(distinct contact_type)代替count(*)

答案 1 :(得分:0)

我的建议是自己加入桌子,一个用于电话,另一个用于传真。

SELECT count(DISTINCT t1.PERSON_ID)  --DISTINCT is to handle duplicates
FROM table_name t1, table_name t2
WHERE t1.PERSON_ID=t2.person_ID
AND t1.CONTACT_TYPE='PHONE'
AND t1.CONTACT_DETAIL=X --your search for PHONE
AND t2.CONTACT_TYPE='FAX'
AND t2.CONTACT_DETAIL=Y; --your search for FAX