You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL报表数据缺失排查:Phone类周四订单量显示异常问题

SQL查询错误排查:Phone分类周四订购数量显示异常

数据表

Orders表

order_idcustomer_idorder_dateitem_idquantity
112020-06-01 00:00:00110
212020-06-08 00:00:00210
322020-06-02 00:00:0015
432020-06-03 00:00:0035
542020-06-04 00:00:0041
642020-06-05 00:00:0055
752020-06-05 00:00:00110
852020-06-14 00:00:0045
952020-06-21 00:00:0035
542020-06-08 00:00:0041

Items表

item_iditem_nameitem_category
1LC Alg. BookBook
2LC DB. BookBook
3LC SmarthPhonePhone
4LC Phone 2020Phone
5LC SmartGlassGlasses
6LC T-Shirt XLT-Shirt

期望报表结果

CategoryMondayTuesdayWednesdayThursdayFridaySaturdaySunday
Book205001000
Glasses0000500
Phone00510010
T-Shirt0000000

问题描述

编写的SQL查询大部分结果正确,但Phone分类的周四(Thursday)订购数量应为1,查询却返回0。该数据在cte2中能正确获取,但在cte3中丢失。

错误分析

问题出在cte1的日期名称定义上:

  • select "Thursday " union和select "Saturday " union这两行的字符串末尾多了一个空格,而cte2中通过dayname(order_date)返回的日期名称是无空格的(比如Thursday)。
  • 当cte1和cte2进行left join时,带空格的Thursday 无法和无空格的Thursday匹配,导致这部分数据关联失败,coalesce(cte2.tt_qty, 0)返回0。
  • 最终在case when判断时,cte3.day_name ='Thursday'也无法匹配到cte1中带空格的Thursday ,所以结果显示为0。

修正后的SQL查询

with cte1 as 
    (select * from
        (select "Monday" as day_name union 
        select "Tuesday" union
        select "Wednesday" union
        select "Thursday" union
        select "Friday" union
        select "Saturday" union
        select "Sunday" ) t1
     cross join
        (select distinct item_category from items) t2),
cte2 as 
    (select i.item_category, 
        dayname(order_date) as day_name,
        sum(quantity) as tt_qty
    from orders o
    inner join items i 
    on i.item_id  = o.item_id 
    group by i.item_category, dayname(order_date)),
cte3 as
    (select cte1.day_name,
        cte1.item_category,
        coalesce(cte2.tt_qty, 0) as tt_qty
    from cte1
    left join cte2
    on cte2.day_name = cte1.day_name
    and cte2.item_category = cte1.item_category)
select item_category as category, 
    coalesce (max(case when cte3.day_name ='Monday' then cte3.tt_qty 
        end),0) as Monday,
    coalesce (max(case when cte3.day_name ='Tuesday' then cte3.tt_qty 
        end),0) as Tuesday,
    coalesce (max(case when cte3.day_name ='Wednesday' then cte3.tt_qty 
        end),0) as Wednesday,
    coalesce (max(case when cte3.day_name ='Thursday' then cte3.tt_qty
        end),0) as Thursday,
    coalesce (max(case when cte3.day_name ='Friday' then cte3.tt_qty 
        end),0) as Friday,
    coalesce (max(case when cte3.day_name ='Saturday' then cte3.tt_qty 
        end),0) as Saturday,
    coalesce (max(case when cte3.day_name ='Sunday' then cte3.tt_qty 
        end),0) as Sunday       
from cte3
group by item_category
order by 1

内容的提问来源于stack exchange,提问作者sotn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 12:27:16