Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在一次高效查询中选择过去30天和7天内注册的用户_Sql_Mysql - Fatal编程技术网

Sql 在一次高效查询中选择过去30天和7天内注册的用户

Sql 在一次高效查询中选择过去30天和7天内注册的用户,sql,mysql,Sql,Mysql,我的查询选择了过去30天内的用户注册数: SELECT COUNT(*) AS UserCount30 FROM User WHERE User.UserDateCreated > (CURDATE() - INTERVAL 30 DAY) 然后我有一个查询,选择过去7天内注册的用户数 SELECT COUNT(*) AS UserCount7 FROM User WHERE User.UserDateCreated > (CURDATE() - INTER

我的查询选择了过去30天内的用户注册数:

SELECT
  COUNT(*) AS UserCount30
FROM
  User
WHERE
  User.UserDateCreated > (CURDATE() - INTERVAL 30 DAY)
然后我有一个查询,选择过去7天内注册的用户数

SELECT
  COUNT(*) AS UserCount7
FROM
  User
WHERE
  User.UserDateCreated > (CURDATE() - INTERVAL 7 DAY)

理想情况下,这些都将成为一个更大查询的一部分。如何在一个最好不使用子查询的高效查询中获得这两个值。

为什么不使用子查询?因为“所有子查询都很慢”的神话

这里


为什么不使用子查询?因为“所有子查询都很慢”的神话

这里


做30天的拉,然后数一数。然后做一个sum,因为expr in sum有一个if语句,如果它在7天内返回1,否则返回0

SELECT COUNT(*) AS UserCount30, 
       SUM(if((CURDATE() - INTERVAL 7 DAY) < User.UserDateCreated) 1 else 0)
  FROM USER
 WHERE User.UserDateCreated > (CURDATE() - INTERVAL 30 DAY)

做30天的拉,然后数一数。然后做一个sum,因为expr in sum有一个if语句,如果它在7天内返回1,否则返回0

SELECT COUNT(*) AS UserCount30, 
       SUM(if((CURDATE() - INTERVAL 7 DAY) < User.UserDateCreated) 1 else 0)
  FROM USER
 WHERE User.UserDateCreated > (CURDATE() - INTERVAL 30 DAY)
我喜欢coffeepac的答案,但改变了一点,更容易阅读/理解它这样做的原因,IMHO

我不是一个mySQL的家伙,但我要小心的一件事是,如果UserDateCreated是一个像SQLServer使用的日期/时间字段。在这种情况下,最好在执行逻辑,=,。。。比较

我喜欢coffeepac的答案,但改变了一点,更容易阅读/理解它这样做的原因,IMHO


我不是一个mySQL的家伙,但我要小心的一件事是,如果UserDateCreated是一个像SQLServer使用的日期/时间字段。在这种情况下,最好在执行逻辑,=,。。。比较。

我认为您将过去7天内注册的用户视为过去30天内注册的用户的子集?“你想把他们都算进去吗?”戴夫当然想。在过去7天内注册的用户也是在过去30天内注册的用户。我认为您将在过去7天内注册的用户视为在过去30天内注册的用户的子集?“你想把他们都算进去吗?”戴夫当然想。在过去7天内注册的用户也是在过去30天内注册的用户。在本例中,最近7天的用户不算两次吗?也就是说,他们是在过去30天内和过去7天内注册的。是的-我用@bball验证了这一点-任何在过去7天内注册的用户都应该在这两个计数中。在这一个计数中,最后7个不会被计数两次吗?也就是说,他们是在过去30天内和过去7天内注册的。是的-我用@bball验证了这一点-任何在过去7天内注册的用户都应该在这两个计数中。
SELECT 
   SUM(if((CURDATE() - INTERVAL 30 DAY)< User.UserDateCreated) 1 else 0) AS Last30, 
   SUM(if((CURDATE() - INTERVAL 7 DAY)< User.UserDateCreated) 1 else 0) AS Last7
FROM 
   USER