基于两张表,编写查询2019年第二季度5月得分的SQL语句
查询2019年5月得分的SQL优化与说明
你的基础SQL已经搭好了核心逻辑,不过为了精准匹配「2019年第二季度5月」的需求,我们可以补充年份过滤条件,避免误统计其他年份5月的数据。
你的原始查询代码
SELECT XD.user_Id, XD.[Name],XD.viTri,XD.sex ,SUM(BD.Point) as pointM FROM XemDiem XD INNER JOIN BieuDo BD On BD.user_Id = XD.user_Id WHERE Month(BD.[DateTime]) = 5 GROUP BY XD.user_Id, XD.[Name],XD.viTri ,XD.sex
优化后的目标SQL
SELECT XD.user_Id, XD.[Name], XD.viTri, XD.sex, SUM(BD.Point) AS pointM FROM XemDiem XD INNER JOIN BieuDo BD ON BD.user_Id = XD.user_Id -- 同时限定年份和月份,确保只统计2019年5月(属于第二季度)的数据 WHERE YEAR(BD.[DateTime]) = 2019 AND MONTH(BD.[DateTime]) = 5 GROUP BY XD.user_Id, XD.[Name], XD.viTri, XD.sex
关键细节说明
- 新增
YEAR(BD.[DateTime]) = 2019:精准锁定2019年,避免不同年份的5月数据混入结果 - 如果需要统计所有XemDiem中的用户(包括BieuDo里无记录、得分为0的用户),可以把
INNER JOIN改成LEFT JOIN,并将SUM(BD.Point)替换为ISNULL(SUM(BD.Point), 0) - 分组字段和SELECT中的非聚合字段完全对应,符合SQL语法规范,不会出现分组报错问题
内容的提问来源于stack exchange,提问作者Hoàng Hiệp
相关产品推荐
相关产品推荐

