SQL统计每场赛事周边销售额及总汇总行,现有代码结果不符求排错
错误原因排查
你的现有SQL存在3个核心问题,无法匹配预期输出:
- 仅实现了按比赛日期分组统计单场周边销售总额,缺少所有赛事总销售额的汇总行,需要用分组汇总语法实现额外的总计行
- 日期格式不匹配,原game表存储的gameDate为
DD-MM-YYYY格式,预期输出为YYYY-MM-DD格式,未做日期转换 - merchandise表的mPrice字段带$货币符号,属于字符串类型,直接参与乘法计算会触发类型错误,需要先处理为数值类型再计算
修正后的SQL示例(MySQL环境)
SELECT IFNULL(DATE_FORMAT(STR_TO_DATE(g.gameDate, '%d-%m-%Y'), '%Y-%m-%d'), 'All Merchandise') AS Games, FORMAT(SUM(CAST(REPLACE(m.mPrice, '$', '') AS DECIMAL(10,2)) * s.mquantity), 'C') AS Total FROM salesTransaction s JOIN game g ON g.gameId = s.gameId JOIN merchandise m ON m.mId = s.mId GROUP BY g.gameDate WITH ROLLUP;
逻辑说明
- 用
STR_TO_DATE把原表字符串格式的日期转成日期类型,再用DATE_FORMAT输出为要求的YYYY-MM-DD格式 - 用
REPLACE去掉mPrice的$符号,转成十进制数值后再和购买数量相乘计算单条交易金额 - 用
WITH ROLLUP在分组统计的基础上额外生成总计行,再用IFNULL把总计行的空日期值替换为要求的All Merchandise
内容的提问来源于stack exchange,提问作者afangsco
相关产品推荐
相关产品推荐

