MySQL,按周查询,结果保留没有记录的周

我想按周查询某表(存款记录)的一个属性(金额)的和,MySQL代码如下,但由于中间有些周没有记录,查询结果不会有这些周,我想像外连接一样保留这些周(对应金额即为null或0,随便),请问如何实现?
我能想到的是建一个记录了很多连续周的表,再用外连接,但感觉有点冗余;而且感觉这类问题很常见;想问一下有没有直接一点的方法

SELECT DATE_FORMAT(DEPOSIT_TIME,'%x-%v') WEEK,SUM(AMOUNT) FROM deposit GROUP BY WEEK ORDER BY WEEK;

一年52周,列出来呗

select a.click_week,ifnull(b.count,0) as count
    from (
        SELECT 0 as click_week
        union all
        SELECT 1 as click_week
        union all
        SELECT 2 as click_week
        union all
        SELECT 3 as click_week
        union all
        SELECT 4 as click_week
        union all
        SELECT 5 as click_week
        union all
        SELECT 6 as click_week
        union all
        SELECT d as click_week
        ....
        union all
        SELECT 52 as click_week
    ) a left join (
      select  week(DEPOSIT_TIME) as click_week, count(*) as count
      from deposit
      group by  week(DEPOSIT_TIME)
    ) b on a.click_week = b.click_week;

只有建一个记录了很多连续周的表吧

项目中可以写个定时任务,新建个表就存放你要的查询结果,每周执行一次,然后就只需要查这个表就行

先生成一个日历表 然后将这个日历表 转换成对应的周。
这个表保存两列数据 date 跟 week
date 的时间从1997-01-01 到2999-01-01 总共四十多万条数据 保存常用

此类问题一般有两种处理方式,最简单的就是建立关于日期的实体表,优点在于查询方便,楼上的小伙伴都已经说了,这里不再介绍;下面说一下另一种处理方式,生成关于日期的虚拟表,然后关联查询存款记录表即可.优点在于不用占用磁盘的数据空间.现在说一下具体的处理步骤.
1.创建虚拟周数表;

SELECT
    @s := @s - 1 AS id,
    DATE_FORMAT(DATE_SUB(CURRENT_DATE, INTERVAL @s WEEK),'%x-%v') AS week_day 
FROM
    mysql.help_topic,
    ( SELECT @s := WEEK(CURRENT_DATE) ) temp  
WHERE
    @s >0
ORDER BY
    week_day  DESC

查询结果如下(按照当前周倒序排列):

img

2.关联查询存款记录表,以周为单位计算每周的总金额,按照倒叙进行排列.

select t.week_day,ifnull(SUM(deposit.`AMOUNT`),0) total_amount from (SELECT
    @s := @s - 1 AS id,
    DATE_FORMAT(DATE_SUB(CURRENT_DATE, INTERVAL @s WEEK),'%x-%v') AS week_day 
FROM
    mysql.help_topic,
    ( SELECT @s := WEEK(CURRENT_DATE) ) temp  
WHERE
    @s >0
ORDER BY
    week_day  DESC) t left join deposit on t.week_day=DATE_FORMAT(deposit.`DEPOSIT_TIME`,'%x-%v') group by t.week_day order by t.week_day desc

查询结果如下:

img

3.检查一下统计数据是否正确

img

上面是按照题主提供的信息自定义的资金表,自行计算每周的资金总和:当前周资金总和50,上周20,上上周20.与查询结果一致,问题解决!
如果感觉有帮助欢迎采纳!

你是自己写着玩的,还是公司的,公司的一般都有每天的数据,在轻度聚合一下就好

浅学一下