繁体   English   中英

sql查询有什么问题?

[英]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.

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