[英]What's wrong with sql query?
我需要做的是,返回今天的注册用户数和激活的用户数(今天)我的查询看起来像那样。
SELECT
Count(u1.id) AS `registered`,
Count(u2.id) AS `active`
FROM
USER u1,
USER u2
WHERE
u1.registeredAt = CURDATE()
AND u2.active = 1;
我错误的是它为两者返回0值?
关于实际查询,您的问题有点不清楚。 首先,我将从约会开始。 CURDATE()返回当前日期/时间的日期部分,没问题。 但是,您要求“RegisteredAt”= curdate()。 RegisteredAt是仅存储日期还是完整日期/时间。 如果是完整日期时间,您应该考虑通过
其中u1.RegisteredAt> = CURDATE()
所以它从一天开始就得到了所有东西,并且由于没有人应该拥有比今天更大的registeredAt日期,所以你不需要明确地添加AND u1.registeredAt <明天。
现在,您考虑“活跃”。 如果这也仅适用于当前日期,则根据您的偏好将其调整为IF()或case /,并且您只需要查询中的users表ONCE
SELECT
Count(u1.id) AS `registered`,
sum( if( u1.active = 1, 1, 0 )) as ActiveToday
FROM
USER u1
WHERE
u1.registeredAt >= CURDATE()
您的代码中的问题可能是交叉加入。 解:
SELECT (SELECT count(id) FROM User WHERE registeredAt = CURDATE()) AS `registered`,
(SELECT count(id) FROM User WHERE active = 1) AS `active`
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.