我有一个看起来像这样的表 - http://d.pr/jQ1P然后是另一个表(我们称之为“actions”表),其中包含所有用户都已完成的事情列表。
如何编写一个查询,可以让我计算出referrer_id“1”引用了多少新用户,其中“actions”表中至少有一个条目?例如。对于referrer_id“1”,“1723”和“1724”在“actions”表中都至少有一行,但不是“1725.所以对于用户”1“,他已经成功引用了2个用户,即使还有” 1725" 。
希望这是有道理的。
答案 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;