我正在尝试选择customer_id和segment(基于某些逻辑)两件事,这两件事要求它们都在GROUP BY中
我尝试使用没有别名(比如给CASE ... END),但是因为GROUP BY字段名中有MAX而失败了。如果我砍掉MAX,那么它也无法编译。
我应该怎么做才能解决这个问题?
答案 0 :(得分:0)
我不确定为什么你在申请不同时需要“分组依据”条款。我坚信从您的查询中删除“分组依据”条款将为您提供您期望的结果。
答案 1 :(得分:0)
我相信这对我来说是一个SQL小提琴:
alter session enable parallel query;
SELECT
t1.CUSTOMER_ID AS CUSTOMER_ID,
MAX(CASE WHEN t2.event_date=t1.event_date -- MAX is moved all the way outside
THEN 'SweepAcquired'
ELSE 'NonSweepAcquired'
END) AS SEGMENT
FROM dsi t1, transaction t2
WHERE t1.CUSTOMER_ID=t2.CUSTOMER_ID(+)
AND t1.MARKETPLACE_ID = '1'
AND lower(t2.event_type(+))='like'
AND lower(t2.SOURCE_TYPE(+))='sweepstakes'
AND t2.SOURCE_ID(+) IS NOT NULL
AND lower(t2.SOURCE_ID(+)) <> 'unknown'
AND t2.ENTITY_ID(+)='1'
GROUP BY t1.CUSTOMER_ID,
CASE WHEN t2.event_date = t1.event_date
THEN 1
ELSE 0
END
ORDER BY t1.CUSTOMER_ID, SEGMENT
;
出于某种原因,CASE WHEN MAX() CASE WHEN
对我不起作用。我还根据WHERE
子句中的重复简化了一些事情。