如何为以下方案编写查询?

时间:2011-12-18 04:39:30

标签: mysql

我有一个看起来像这样的表 - http://d.pr/jQ1P然后是另一个表(我们称之为“actions”表),其中包含所有用户都已完成的事情列表。

如何编写一个查询,可以让我计算出referrer_id“1”引用了多少新用户,其中“actions”表中至少有一个条目?例如。对于referrer_id“1”,“1723”和“1724”在“actions”表中都至少有一行,但不是“1725.所以对于用户”1“,他已经成功引用了2个用户,即使还有” 1725" 。

希望这是有道理的。

2 个答案:

答案 0 :(得分:2)

使用JOIN,您知道如果有一行,则JOIN表中至少匹配一行。您可以将其与GROUP BY组合以提取唯一ID。我觉得这可能是一种更有效的方式,但首先想到的是:

SELECT 
    COUNT(referrals.new_user_id) 
FROM 
    referrals
    JOIN actions ON actions.user_id = referrals.new_user_id 
WHERE 
    referrals.referrer_id = 1
GROUP BY referrals.new_user_id;

编辑:在考虑了一点之后,假设所有内容都已编入索引,我想不出更有效的解决方案。一些温和的谷歌搜索表明COUNT(DISTINCT referrals.new_user_id)可能更快,而不是使用GROUP BY。

答案 1 :(得分:2)

你走了:

SELECT
  COUNT(DISTINCT r.new_user_id)  
FROM
  referral r    
  JOIN actions a ON a.fk_userid = r.new_user_id 
WHERE 
  r.referrer_id = 1;