查询mysql以查找总值

Posted

技术标签:

【中文标题】查询mysql以查找总值【英文标题】:query mysql to find total value 【发布时间】:2020-03-03 22:22:32 【问题描述】:

请帮助我。 想象下面的表格

id    name         date_join
1     joni        2020-01-01
2     dani        2020-01-01
3     fani        2020-01-02
4     rina        2020-01-02
5     budi        2020-01-02
6     john        2020-01-03
7     dita        2020-01-03
8     sani        2020-01-05
9     soni        2020-01-06
10    aple        2020-01-06
11    rita        2020-01-06
12    hari        2020-01-06

我想查询并显示这样的结果

dates            total_member
2020-01-01       2
2020-01-02       5
2020-01-03       7
2020-01-04       7
2020-01-05       8
2020-01-06       12
2020-01-07       12 

我不知道如何编写查询来显示这样的结果。 我使用 (date_join) 作为日期,count(id) 和 group by date(date_join) 结果不是这样显示的。

【问题讨论】:

【参考方案1】:

mysql 8.0 中,您可以通过聚合和窗口求和来解决这个问题:

select
    date_join,
    sum(count(*))) over(order by date_join) total_members
from mytable
group by date_join
order by date_join

甚至没有聚合:

select date_join, total_members
from (
    select 
        date_join,
        count(*) over(order by date_join, name) total_members,
        row_number() over(order by date, name desc) rn
    from mytable
) t
where rn = 1
order by date_join

在早期版本中,一种选择是选择不同的日期并使用相关子查询来获取运行计数:

select 
    date_join,
    (select count(*) from mytable t1 where t1.date_join <= t.date_join) total_members
from (select distinct date_join from mytable) t

【讨论】:

【参考方案2】:

我想这会很简单:

select date_join `dates`, count(*) `total_member` 
from yourtable 
group by date_join 
order by total_member asc

【讨论】:

【参考方案3】:

您需要生成所有日期,然后使用聚合:

select d.dte, sum(count(*)) over (order by d.dte)
from (select '2020-01-01' as dte union all
      select '2020-01-02' as dte union all
      select '2020-01-03' as dte union all
      select '2020-01-04' as dte union all
      select '2020-01-05' as dte union all
      select '2020-01-06' as dte union all
      select '2020-01-07' as dte 
     ) d left join
     t
     on d.dte <= t.date_join
group by d.dte;

【讨论】:

以上是关于查询mysql以查找总值的主要内容,如果未能解决你的问题,请参考以下文章

mysql:通过自定义搜索查询以查找匹配的朋友

MySQL查询以在单个列中查找相似值

mysql查询以查找具有班级组合的学生[重复]

帮助形成 mysql 查询以查找给定日期范围的免费(可用)场所/资源

MySql 查询以查找给定日期“从”和“到”可用的房间

MySQL 查询以查找每周唯一新访问者的数量