繁体   English   中英

如何为以下情况编写查询?

[英]How can I write a query for the following scenario?

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

我该如何编写一个查询,该查询可以为我提供一个新的计数,即referrer_id“ 1”引用了多少个新用户,并且在“ actions”表中也至少有1个条目? 例如。 对于Referrer_id“ 1”,“ 1723”和“ 1724”在“操作”表中都至少有1行,但没有“ 1725”。因此,对于用户“ 1”,他已经成功推荐了2个用户,即使还有“ 1725" 。

希望有道理。

使用JOIN,您知道如果有一行,那么JOIN表中至少有1行匹配。 您可以将其与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。

干得好:

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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM