2012-09-06 77 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随意更改为你的桌子上存在的名称。