关于统计2013年请求groom服务的主人数量的SQL问题咨询
统计2013年请求groom服务的主人数量的正确SQL写法
嘿,我来帮你搞定这个统计问题!先梳理下原SQL里的问题,再给你修正后的正确写法:
前提与原SQL的问题点
首先,你的服务表(暂时我叫它Puppy_Services,因为你没给表名)看起来缺少Owner_ID字段——这可是关联主人表和服务表的核心!如果没有这个字段,咱们没法把服务记录和对应的主人绑定,所以先假设你的服务表实际是有Owner_ID的,不然这个统计没法完成哦。
然后你的原SQL存在几个语法和逻辑问题:
- 表别名写错了:
FROM servided_date p这里应该写服务表的表名,不是字段名 - 关联条件语法错误:
p.owner_id , o.owner_id应该是p.Owner_ID = o.Owner_ID,这是两张表关联的必要条件 - 字段拼写不一致:表字段是
servided_date,但你写了year(serviced_date),少了个i,得和表结构保持一致 - 未做去重处理:如果同一个主人在2013年多次预约groom服务,直接
count(owner_ID)会重复统计,得用COUNT(DISTINCT)来统计独立的主人数量
正确的SQL写法(推荐用JOIN语法,更清晰易维护)
SELECT COUNT(DISTINCT o.Owner_ID) AS groom_owner_count FROM Owner o JOIN Puppy_Services p ON o.Owner_ID = p.Owner_ID WHERE p.type_service = 'groom' AND YEAR(p.servided_date) = 2013;
如果你习惯用旧的WHERE连接写法(修正你的原代码)
SELECT COUNT(DISTINCT o.Owner_ID) AS groom_owner_count FROM Owner o, Puppy_Services p WHERE o.Owner_ID = p.Owner_ID AND p.type_service = 'groom' AND YEAR(p.servided_date) = 2013;
关键说明
COUNT(DISTINCT o.Owner_ID):确保同一个主人不管做了多少次groom服务,都只被统计一次- 明确的关联条件
o.Owner_ID = p.Owner_ID:把主人表和服务表的记录正确对应起来 - 统一字段拼写:如果你的服务表实际字段是
serviced_date(少了i),记得把SQL里的字段名改成和表一致的 - 表别名
o(对应Owner表)和p(对应服务表)让SQL更简洁好读
内容的提问来源于stack exchange,提问作者Carita
相关产品推荐
相关产品推荐

