我有一些E_ids
与d_ids
中的o_count
和(1,0,null)
中的几个E_IDs
相关联。
因此,如果O_count = 1
中有任何O_count = 1
有E_ID else 0
,我必须将其分成一行并为e_ids
写SELECT DISTINCT E_ID, status
(CASE WHEN o_count = any(1) THEN 1
WHEN o_count = any(0) THEN 0
ELSE null END
) Ocount
FROM (SELECT e_id, status, o_count FROM A)
GROUP BY e_id, status, o_count
。
但是当我执行下面的操作时,我得到的所有行都没有分组,即我得到两行相同的sorted
。有没有其他方法可以做同样的事情?
keys
答案 0 :(得分:0)
是的,只需用MAX()
包裹它:
SELECT E_ID,status
MAX(case when o_count = 1 then 1 ELSE 0 END) as Ocount
FROM A
GROUP BY e_id,status
此外,子查询是不必要的,你没有在那里做任何逻辑。
答案 1 :(得分:0)
首先,您按e_id, status, o_count
分组。这意味着您聚合数据,以便为每个此类组合获得一行。您是否只想单独e_id
或e_id
加status
获得一个结果行?
然后,您的case
构造不包含任何聚合函数,只有o_count
是group by
子句的一部分。因此,您正在查看您希望o_count = any(1)
的一行,当然与o_count = 1
完全相同,因为指定集中只有一个值。您可以仅使用case
替换完整的o_count
表达式。
然后你申请distinct
。但是没有重复项,因为您按所使用的所有列进行分组。所以distinct
在这里没有做任何事情。
从没有任何where
子句或聚合的子查询中进行选择也是多余的,您可以直接从表a
中进行选择。
您的查询可以重写为
select distinct e_id, status, o_count
from a;
我想你想要这样的东西:
select e_id, status, max(o_count)
from a
group by e_id, status;
或者这个:
select e_id, max(status), max(o_count)
from a
group by e_id;