题解 | 获取指定客户每月的消费额

获取指定客户每月的消费额

https://www.nowcoder.com/practice/ed04f148b63e469e8f62e051d06a46f5

我是肺物

我原来的题解:

select 
    date_format(t.t_time, '%Y-%m') time,
    round(sum(t.t_amount), 1) total
from 
    trade t
join
    customer c
on 
    t.t_cus = c.c_id
where 
    t.t_type = 1 and c.c_name = 'Tom' and year(t.t_time) = '2023'
group by
    t.t_time, c.c_id
order by    
    time asc;

答案题解:

SELECT
    DATE_FORMAT(t.t_time, '%Y-%m') AS time,
    ROUND(SUM(t.t_amount),1) AS total
FROM
    trade t
JOIN
    customer c ON t.t_cus = c.c_id
WHERE
    t.t_type = 1
    AND c.c_name = 'TOM'
    AND YEAR(t.t_time) = 2023
GROUP BY
    time
ORDER BY
    time

啥区别:

GROUP BY 子句

  • 1 GROUP BY t.t_time, c.c_id: 这条语句根据交易的精确时间戳 (t.t_time) 和客户 ID (c.c_id) 进行分组。
  • 影响: 如果同一个客户在同一个月份内有多次交易,但这些交易发生在不同的日期,甚至不同的时、分、秒,那么每一个独特的 t_time 都会形成一个独立的分组。这意味着可能会在结果中看到 'Tom' 在同一个月份有多行数据,每一行显示的是某个特定 t_time 下的交易总额。这可能不是想要的结果,如果想按月汇总的话。
  • 2 GROUP BY time: 这条语句根据 SELECT 语句中格式化后的月份字符串 (%Y-%m),也就是 time 别名进行分组。
  • 影响: 这是获取每月总额的正确方式。所有 'Tom' 在特定月份(例如 '2023-01')的交易都将被聚合在一起,它们的 t_amount 会被求和,形成该月份的唯一 total。
全部评论

相关推荐

11-20 22:03
东北大学 Java
用哈基米写的简历,有点夸大,等我后面改谦虚点,能不能找个日常实习,项目是点评和天机,没什么荣誉要不要把蓝桥杯和六级删了算了,实在没门面
程序员花海:日常实习这份简历够用的,等实习之后把实习经历结合业务好好写一下 到时候把实习经历放在项目经历的前面 可以看我主页修改简历的模板
如何写一份好简历
点赞 评论 收藏
分享
10-29 18:20
济南大学 Java
用微笑面对困难:他不是人事吗,怎么净特么不干人事
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务