Group By & Having 与 SubQuery(计数大于 1)
Group By & Having vs. SubQuery (Where Count is Greater Than 1)
我在这里苦苦挣扎,试图编写一个脚本来查找同一个同事多次返回订单的位置(计数大于 1)。我猜我的子查询语法不正确。当我 运行 脚本时,我收到一条消息 "SELECT failed.. [3669] More than one value was returned by the subquery."
我没有绑定到子查询,并尝试仅使用 group by 和 having 语句,但我收到有关非聚合值的错误。在这里进行的最佳方式是什么?我该如何解决这个问题?
提前致谢 - 代码如下:
SEL s.saletran
, s.saletran_dt SALE_DATE
, r.saletran_id RET_TRAN
, r.saletran_dt RET_DATE
, ra.user_id RET_ASSOC
FROM salestrans s
JOIN salestrans_refund r
ON r.orig_saletran_id = s.saletran_id
AND r.orig_saletran_dt = s.saletran_dt
AND r.orig_loc_id = s.loc_id
AND r.saletran_dt between s.saletran_dt and s.saletran_dt + 30
JOIN saletran rt
ON rt.saletran_id = r.saletran_id
AND rt.saletran_dt = r.saletran_dt
AND rt.loc_id = r.loc_id
JOIN assoc ra --Return Associate
ON ra.assoc_prty_id = rt.sls_assoc_prty_id
WHERE
(SELECT count(*)
FROM saletran_refund
GROUP BY ORIG_SLTRN_ID
) > 1
AND s.saletran_dt between '2015-01-01' and current_date - 1
你没有给出足够的完整答案,但这是一个开始
group by s.saletran
, s.saletran_dt SALE_DATE
, r.saletran_id RET_TRAN
, r.saletran_dt RET_DATE
, ra.user_id RET_ASSOC
having count(distinct(ORIG_SLTRN_ID)) > 0
这 return 多了一行
运行 它
SELECT count(*)
FROM saletran_refund
GROUP BY ORIG_SLTRN_ID
根据你目前的情况,我认为你想改用这个:
where r.ORIG_SLTRN_ID in
(select
ORIG_SLTRN_ID
from
saletran_refund
group by ORIG_SLTRN_ID
having count (*) > 1)
这将为您提供不止一行的 ORIG_SLTRN_IDs。
我在这里苦苦挣扎,试图编写一个脚本来查找同一个同事多次返回订单的位置(计数大于 1)。我猜我的子查询语法不正确。当我 运行 脚本时,我收到一条消息 "SELECT failed.. [3669] More than one value was returned by the subquery."
我没有绑定到子查询,并尝试仅使用 group by 和 having 语句,但我收到有关非聚合值的错误。在这里进行的最佳方式是什么?我该如何解决这个问题?
提前致谢 - 代码如下:
SEL s.saletran
, s.saletran_dt SALE_DATE
, r.saletran_id RET_TRAN
, r.saletran_dt RET_DATE
, ra.user_id RET_ASSOC
FROM salestrans s
JOIN salestrans_refund r
ON r.orig_saletran_id = s.saletran_id
AND r.orig_saletran_dt = s.saletran_dt
AND r.orig_loc_id = s.loc_id
AND r.saletran_dt between s.saletran_dt and s.saletran_dt + 30
JOIN saletran rt
ON rt.saletran_id = r.saletran_id
AND rt.saletran_dt = r.saletran_dt
AND rt.loc_id = r.loc_id
JOIN assoc ra --Return Associate
ON ra.assoc_prty_id = rt.sls_assoc_prty_id
WHERE
(SELECT count(*)
FROM saletran_refund
GROUP BY ORIG_SLTRN_ID
) > 1
AND s.saletran_dt between '2015-01-01' and current_date - 1
你没有给出足够的完整答案,但这是一个开始
group by s.saletran
, s.saletran_dt SALE_DATE
, r.saletran_id RET_TRAN
, r.saletran_dt RET_DATE
, ra.user_id RET_ASSOC
having count(distinct(ORIG_SLTRN_ID)) > 0
这 return 多了一行
运行 它
SELECT count(*)
FROM saletran_refund
GROUP BY ORIG_SLTRN_ID
根据你目前的情况,我认为你想改用这个:
where r.ORIG_SLTRN_ID in
(select
ORIG_SLTRN_ID
from
saletran_refund
group by ORIG_SLTRN_ID
having count (*) > 1)
这将为您提供不止一行的 ORIG_SLTRN_IDs。