2011-03-07 27 views
1

我一直在努力使用多重計數語句。 我的桌子是這樣建造的;在SQL中使用多重計數語句奮鬥

person1, person2, relation 
peter  ann  coworkers 

我需要計算peter在戀人下有多少關係。 etc等

我想出了這個;

select(
select count(*) 
from rel 
where person1 = 'peter' and relation = 'coworker' 
)as PetersFriends,(
select count(*) 
from rel 
where person1 = 'peter' and relation = 'lovers' 
) 
as PetersLovers 
; 

但我似乎無法得到它的工作。

+0

您可以請嘗試詳細說明並使用正確的格式。我害怕,我不明白你的問題。另外:你使用哪個DBMS? – nfechner 2011-03-07 10:37:15

+1

你是'彼得'嗎?如果你愛上同事呢? :) – sasfrog 2011-03-07 10:38:46

+0

聽起來像作業給我。是嗎?如果是這樣,請將其標記爲。 – anothershrubery 2011-03-07 10:40:47

回答

1
select relation, count(*) as RelationCount 
from rel 
where person1='peter' 
group by relation 
+0

我需要知道每個關係彼得,安和溫迪有多少 – user493417 2011-03-07 10:40:58

+0

這不是你的問題所說的。也許你可以從我上面提供的內容中闡述一下? – sasfrog 2011-03-07 10:46:45

1

您的原始查詢似乎想要一個透視結果。如果是這種情況,你需要類似的東西。

select person1, 
     COUNT(case when relation = 'coworker' then 1 end) AS Friends, 
     COUNT(case when relation = 'lovers' then 1 end) AS Lovers 
from rel 
where person1 IN ('peter','ann','wendy') 
GROUP BY person1 
+0

@ user493417 - 您需要提供比這更多的細節。 – 2011-03-07 10:57:52

0

假設

Peter, Ann, Coworker 

也將有相應的條目:

Ann, Peter, Coworker 

然後,你可以簡單地這樣做:

SELECT Person1, Relation, COUNT(1) 
FROM Rel 
GROUP BY Person1, Relation 

否則,你可以這樣做:

SELECT Person1, Relation, COUNT(1) 
FROM Rel 
GROUP BY Person1, Relation 
UNION 
SELECT Person2, Relation, COUNT(1) 
FROM Rel 
GROUP BY Person2, Relation