我希望从中获取具有重复值及其计数的记录,如下所示。
我正在尝试跟踪查询,但它显示错误的计数。请建议我。
我使用的查询:
SELECT msisdn, waiver_reason, COUNT(msisdn) AS cnt
FROM ECONSOLE_NEW
WHERE msisdn
IN
(
SELECT [CUSTOMER CELL NUMBER]
FROM SOFTCLOSURE
INTERSECT
SELECT msisdn
FROM ECONSOLE_NEW
GROUP BY msisdn
HAVING COUNT(msisdn) > 1
)
GROUP BY msisdn, waiver_reason
ORDER BY msisdn
结果我得到:
msisdn waiver_reason cnt
------------------------
111 DD 1
111 VD 1
222 LP 1
222 VD 1
333 DDW 1
333 GG 1
333 GQ 1
我想要的结果 ==>
msisdn waiver_reason cnt
---------------------------
111 DD 2
111 VD 2
222 LP 2
222 VD 2
333 DDW 3
333 GG 3
333 GQ 3
答案 0 :(得分:5)
每个msisdn, waiver_reason
对似乎只有1条记录。您似乎希望每msisdn
次计数,并同时返回所有msisdn, waiver_reason
对。
如果是这种情况,那么您可以使用COUNT
的窗口版本来获得预期结果:
select msisdn, waiver_reason,
count(msisdn) over (partition by msisdn) as cnt
from ECONSOLE_NEW
where msisdn in
(
select [CUSTOMER CELL NUMBER] from SOFTCLOSURE
intersect
select msisdn
from ECONSOLE_NEW
GROUP BY msisdn
having COUNT(msisdn)>1
)
order by msisdn
答案 1 :(得分:1)
cnt
列与msisdn
列相关。
尝试以下查询:
SELECT msisdn,
waiver_reason,
(
SELECT SUM(cnt)
FROM ECONSOLE_NEW
WHERE msisdn = e.msisdn
) AS cnt
FROM ECONSOLE_NEW AS e
WHERE msisdn IN
(
SELECT [CUSTOMER CELL NUMBER]
FROM SOFTCLOSURE
INTERSECT
SELECT msisdn
FROM ECONSOLE_NEW
GROUP BY msisdn
HAVING COUNT(msisdn) > 1
)
GROUP BY msisdn, waiver_reason
ORDER BY msisdn
答案 2 :(得分:1)
要执行此类计数,您最后可以使用分组,然后拥有子句作为计数条件,例如:
SELECT COLUMN_X, COUNT(COLUMN_X)
FROM YOUR_TABLE
GROUP BY COLUMN_X
HAVING COUNT(COLUMN_X) > n;
它将返回 column_x 值的元组,该值在表格中重复超过 n 次。