2012-09-06 234 views
-5

我有兩個表:「成員」和「問題」。每個成員都可以提出多個問題。MySQL計數查詢一對多關係

我想找回誰已被要求超過3個問題

我的查詢到目前爲止成員數:

SELECT DISTINCT q.question_id, COUNT(q.question_id) AS question_id_count 
FROM member m 

inner join question q on m.member_id = q.member_id 

GROUP BY m.member_id 
HAVING (
COUNT(q.question_id) >3 
) 

我能做些什麼來改善此查詢?謝謝

+3

它能做什麼?它不是做什麼的?它出什麼問題了?請提供更多信息。 – Silox

+0

是否要檢索詢問超過3個問題的成員數量,或詢問每個詢問超過3個問題的成員的問題數量? – Erik

+0

我猜測問題是他們選擇'q.question_id',但是'm.member_id'分組。可能想要選擇'm.member_id'。 – LittleBobbyTables

回答

1

這是不正確的。

如果您是按會員分組,那麼您應該顯示會員!

distinct是unnecesary,它會顯示只有一次每個成員

鑑於此評論(除非你有反覆的成員!):

你想找回成員誰問的數超過3 的問題或詢問的每個成員的問題數量超過3個問題要求更多 ?

第一種選擇將是

select count(*) from 
(SELECT m.member_id 
    FROM member m 
    inner join question q on m.member_id = q.member_id 
    GROUP BY m.member_id 
    HAVING COUNT(q.question_id) >3) T 

第二個選項將是

SELECT m.member_id, COUNT(q.question_id) AS question_id_count 
FROM member m 
inner join question q on m.member_id = q.member_id 
GROUP BY m.member_id 
HAVING COUNT(q.question_id) >3 
+1

非常感謝幫助 –

+1

@osamajetawe如果答案是什麼你需要,你應該勾選它是正確的(也是upvote!)。這個或另一個,幫助你的人越多,以及前兩者越多。您可以同時使用這兩種方法,但只能打勾正確 –

0

根據你的陳述i want to retrieve count of member whose askedmore than 3 question,由memberID連接表,並將它們組合。

SELECT a.member_id, count(b.member_id) totalQuestion 
FROM member a 
     INNER JOIN question b 
      ON a.member_id = b.member_id 
GROUP BY a.member_id 
HAVING count(b.member_id) > 3 

爲你一個看到這種情況下,ON a.member_id = b.member_id,它通過memberID鏈接兩個表(您可以COLUMNNAME隨意更改爲你的桌子上存在的名稱。