使用 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
上查看 运行
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
我运行这个查询:
当我部署代码时,我意识到它没有给我所需的结果。我希望实现的目标:让用户在 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 次。
见图片
我只希望显示同时出现在 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
上查看 运行
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