MYSQL - 每日总注册量

标签 mysql count group-by

我的用户表中有以下结构:

id(INT)    registered(DATETIME)
1          2016-04-01 23:23:01
2          2016-04-02 03:23:02
3          2016-04-02 05:23:03
4          2016-04-03 04:04:04

我想获取数据库中所有日期每天的总(累计)用户数 所以结果应该是这样的

day          total
2016-04-01   1
2016-04-02   3
2016-04-03   4

我尝试了一些子查询,但不知何故我现在知道如何用可能的 1 个 SQL 语句来实现这一点。当然,如果可以按天计数进行分组并以编程方式添加它们,但如果可能的话我不想这样做。

最佳答案

您可以使用 GROUP BY 来执行所有计数,而无需以编程方式执行任何操作,请查看此查询:

select
  d.dt,
  count(*) as total
from
  (select distinct date(registered) dt from table1) d inner join
  table1 r on d.dt>=date(r.registered)
group by
  d.dt
order by
  d.dt

第一个子查询返回所有不同的日期,然后我们可以将所有日期与所有先前的注册连接起来,并进行计数,所有这些都在一个查询中进行。

可以提高性能的另一种连接条件是:

on d.dt + interval 1 day > r.registered

关于MYSQL - 每日总注册量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37982867/

相关文章:

php - Yii2-查询结果数组不返回任何值

php - 获取用户特定半径内的坐标

mysql - 计算 SQL 表中两列的重复项

MySQL 从连接表中计算两个组

python - 如何为列中存在的每个值导出变量

sql - 如何在数学上做 "GROUP BY"?

php - 将行与 mysql 中的最新日期连接起来

python - 在 django 中对列表的每个元素调用方法的快速策略是什么

mysql - 合并行并给我总计数

sql - 按 <a date field> 分组在我的 Sql (Oracle) 中不起作用