【发布时间】:2015-08-06 02:50:55
【问题描述】:
我正在编写一个计算公司投诉的查询。查询应计算来自公司的投诉总数,并将其分解为来自公司的投诉人。所以一个示例输出是:
Company Ref Company Name Company Complaints Caller Caller Complaints
11 Argos 10 Steve 8
11 Argos 10 JIM 2
因此,您可以看到查询计算投诉总数,然后将其分解为投诉人。到目前为止,除了总数之外,我的一切都很完美。我的代码是:
SELECT COMPANYREF,
COMPANY,
(SELECT COUNT(COMPANYREF)
FROM XCALLSTABLE) AS CompanyCalls,
CALLER,
COUNT(*)
FROM XCALLSTABLE
JOIN XCUSTOMERTABLE ON (XCALLSTABLE.COMPANYREF = XCUSTOMERTABLE.CUSTREF)
JOIN XTELEPHONETABLE ON (XCUSTOMERTABLE.TELEPHONE = XTELEPHONETABLE.PHONENUMBER)
GROUP BY COMPANYREF,
COMPANY,
CALLER
HAVING COUNT(*) > 0 ;
当前代码的一些示例输出是:
Company Ref Company Name Company Complaints Caller Caller Complaints
145 Comfiture Traders 500 Alexis Patel 4
这里的问题是公司的总数只计算每一行,而我试图计算该公司出现在列中的次数。
我们将不胜感激。
使用 sstan 的代码给出的结果是
111 Medusa Shipping 4 Lily Morgan 5
111 Medusa Shipping 4 Ruby Walker 6
结果应该是
111 Medusa Shipping 11 Lily Morgan 5
111 Medusa Shipping 11 Ruby Walker 6
【问题讨论】:
-
我认为如果您在 CompanyCalls 的子选择周围添加 MAX (...) 就可以了。像 SELECT COMPANYREF, COMPANY, MAX ((SELECT ... FROM XCALLSTABLE)) as CompanyCalls ...但是您可能还需要在子选择上加入 JOIN,以确保数据集相同。