查询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以查找总值的主要内容,如果未能解决你的问题,请参考以下文章