sql查询有什么问题?

时间:2014-02-24 16:06:03

标签: mysql count

我需要做的是,返回今天的注册用户数和激活的用户数(今天) 我的查询看起来就是这样。

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值?

2 个答案:

答案 0 :(得分:2)

关于实际查询,您的问题有点不清楚。首先,我将从约会开始。 CURDATE()返回当前日期/时间的日期部分,没问题。但是,您要求“RegisteredAt”= curdate()。 RegisteredAt是仅存储日期还是完整日期/时间。如果是完整日期时间,您应该通过

进行帐户管理

其中u1.RegisteredAt> = CURDATE()

所以它从一天开始就得到了所有东西,并且因为没有人应该比今天更大的注册日期,所以你不需要明确地添加AND u1.registeredAt<明天。

现在,您对“活跃”的考虑。如果这也仅适用于当前日期,则根据您的偏好将其调整为IF()或大小写/并且您只需要查询中的用户表ONCE

SELECT
    Count(u1.id) AS `registered`,
    sum( if( u1.active = 1, 1, 0 )) as ActiveToday
FROM
    USER u1
WHERE
    u1.registeredAt >= CURDATE()

答案 1 :(得分:0)

您的代码中的问题可能是交叉加入。解决方案:

SELECT (SELECT count(id) FROM User WHERE registeredAt = CURDATE()) AS `registered`,
    (SELECT count(id) FROM User WHERE active = 1) AS `active`