【发布时间】:2017-10-25 20:36:32
【问题描述】:
以下是表格: 客户
custid(PK) custname custtype
001 john null
002 rob 1
城市
cityid(PK) cityname
001 Baltimore
002 Knoxville
包装
packageid(PK) custid(PK,FK) cityid
001 001 001
001 002 001
002 001 002
现在我的查询是这样的:
SELECT DISTINCT CITYNAME, CUSTTYPE, COUNT(P.PACKAGEID) AS PACKAGE_COUNT
FROM CITY S LEFT OUTER JOIN PACKAGE P
ON S.CITYID=P.CITYID,
CUSTOMER C INNER JOIN PACKAGE Q
ON C.CUSTID=Q.CUSTID
GROUP BY CITYNAME, CUSTTYPE;
结果:
CITYNAME CUSTTYPE PACKAGE_COUNT
BALTIMORE NULL 4
KNOXVILLE NULL 2
BALTIMORE 1 2
KNOXVILLE 1 0
我想看到的是:
CITYNAME CUSTTYPE PACKAGE_COUNT
BALTIMORE NULL 1
KNOXVILLE NULL 1
BALTIMORE 1 1
KNOXVILLE 1 0
据我所知,cityname 计数乘以 custtype 计数,即 baltimore = 2 和 null = 2 因此 2*2 = 4。即使在包表中,baltimore 只收到一个来自 null custtype 的包。任何帮助将不胜感激
【问题讨论】:
-
只运行查询的第一部分而不使用 group by,看看它会产生什么结果。 SELECT CITYNAME, CUSTTYPE, P.PACKAGEID FROM CITY S LEFT OUTER JOIN PACKAGE P ON S.CITYID=P.CITYID, CUSTOMER C INNER JOIN PACKAGE Q ON C.CUSTID=Q.CUSTID
-
当我运行查询的第一部分时,我明白你的意思是查询重复记录,但是如果我将 DISTINCT 子句添加到 CITYNAME 它可以解决这个问题,但当聚合函数为重新包含在查询中,但谢谢。
标签: sql count ssms aggregate-functions