使用 Count, Group, join order by it returns 值但不准确

Using Count, Group, join order by it returns value but not accurately

我运行这个查询:

当我部署代码时,我意识到它没有给我所需的结果。我希望实现的目标:让用户在 studentusers 和 useractivation 中出现电子邮件,前提是电子邮件出现在 useractivation 中 refcomfirm='2' 并且它出现在 studentusers.refemail <3 或 [=40 中=]='' 即它根本不会发生。请帮忙

    SELECT studentusers.refemail, COUNT( studentusers.refemail ) 
FROM studentusers
LEFT JOIN useractivation ON studentusers.email = useractivation.email
WHERE useractivation.refcomfirm =  '2'
GROUP BY studentusers.refemail
HAVING COUNT( studentusers.refemail ) <3
LIMIT 0 , 500

我有一个 table studentusers(包含所有用户) 另一个用户激活(保存所有用户激活)

两者的共同列是电子邮件

我希望只显示在 studentusers.refemail 列中出现少于 3 次的电子邮件并且必须将 useractivation.refcomfirm 设置为 2

但是如果您查看下图,您会注意到电子邮件 akaakapurity@gmail.com 出现了。

当我 运行 在 akaakapurity@gmail.com 上搜索时,它 return 3 行意味着它出现了 3 次。 见图片 它return三行

我只希望显示同时出现在 table 中但在 refemail less dan 中出现三次并且在 useractivation table 中将 refcomfirm 设置为 2

的电子邮件

我希望这已经足够清楚了。谢谢你的帮助

您希望只包含在 table、 中未出现 3 次或更多次的电子邮件,即使这些事件没有 refconfirm=2 .但是在您当前的查询中,您只计算那些符合该条件的查询。

因此,请更改您的查询以将该条件移动到 having 子句,在该子句中您将只需要至少一个计数记录具有该特定条件:

SELECT    studentusers.refemail, COUNT( studentusers.refemail ) 
FROM      studentusers
LEFT JOIN useractivation ON studentusers.email = useractivation.email
GROUP BY  studentusers.refemail
HAVING    COUNT( studentusers.refemail ) < 3
     AND  COUNT( CASE WHEN useractivation.refcomfirm = '2' THEN 1 END ) > 0
LIMIT     0, 500

sqlfiddle.com

上查看 运行
SELECT a.refemail, COUNT( * ) 
FROM studentusers a
JOIN useractivation b ON a.refemail = b.email
WHERE b.refcomfirm =  '2'
AND refemail !=  'adminpro@studentmillionaire.com.ng'
AND refemail !=  'adminprime@studentmillionaire.com.ng'
AND refemail !=  'admingold@studentmillionaire.com.ng'
AND refemail !=  'adminpremium@studentmillionaire.com.ng'
GROUP BY a.refemail
HAVING COUNT( * ) <3
ORDER BY a.id ASC 
LIMIT 0 , 500