我正在尝试编写一个查询来获取有关列的条目的计数,该列也在整个表中具有匹配的相应列值。
澄清,例如,这个人的表,联系他们的方式,以及联系方式
|PERSON_ID | CONTACT_TYPE | CONTACT_DETAIL|
| 1 | PHONE | 123-4567 |
| 2 | FAX | 234-5678 |
| 1 | FAX | 345-6789 |
现在,假设我想找到电话号码为X且传真号码为y的人数。有没有办法做到这一点?
答案 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