如何为聚合后的指标添加第二个维度列?SQL实操问询
解决方法
因为你已经确认每个userId对应的userType是唯一的,所以有两种可靠的实现方式:
方法一:将userType加入GROUP BY子句
这是最符合SQL标准的写法,当SELECT中包含非聚合列时,这些列通常需要出现在GROUP BY中(部分数据库宽松模式下可省略,但规范写法建议遵循此规则)。由于每个userId对应唯一的userType,分组userId, userType和只分组userId的结果完全一致,不会影响聚合计算的准确性。
修改后的SQL:
select SUM(case when (eventType like 'Add') then 1 else 0 end) as sum_uploads, userId, userType from entry group by userId, userType order by sum_uploads desc
方法二:使用聚合函数获取唯一的userType
如果不想修改GROUP BY子句,可以用MAX()或MIN()这类聚合函数包裹userType。因为每个userId的userType唯一,取最大或最小值都会得到那个唯一值,不会改变结果。
修改后的SQL:
select SUM(case when (eventType like 'Add') then 1 else 0 end) as sum_uploads, userId, MAX(userType) as userType from entry group by userId order by sum_uploads desc
两种方法都能满足需求,推荐优先使用方法一,它更符合SQL规范,可读性也更强。
内容的提问来源于stack exchange,提问作者Michal Leschinsky
相关产品推荐
相关产品推荐

