-- 问题提炼:客户名Tom  在2023年  每月 消费金额 (按月份正序显示)

SELECT 
    DATE_FORMAT(t_time, '%Y-%m') AS time
    ,SUM(t_amount) AS total
FROM 
    trade 
WHERE 
    YEAR(t_time) = '2023'
    AND t_type = 1
    AND t_cus = (SELECT c_id FROM customer WHERE c_name = 'Tom')
GROUP BY DATE_FORMAT(t_time, '%Y-%m')
ORDER BY DATE_FORMAT(t_time, '%Y-%m')
;

重点:

DATE_FORMAT()函数的格式:DATE_FORMAT(date, format)

format参数

%Y:四位的年份(如:2024)
%y:两位的年份(如:24)
%m:月份(01-12)
%d:月份中的天数(01-31)
%H:小时(00-23)
%i:分钟(00-59)
%s:秒数(00-59)
%w:一周中的天数(0=星期日, 1=星期一,...,6=星期六)

SELECT DATE_FORMAT('2024-08-23', '%Y-%m-%d');  -- 输出:2024-08-23
SELECT DATE_FORMAT('2024-08-23', '%Y%m');      -- 输出:202408

t_cus = (SELECT c_id FROM customer WHERE c_name = 'Tom')

一开始的想法是表关联,后来用子查询,子查询要快些,因为只获取一笔数据的某个字段。

END