我有一个查询,该查询按某个列对表进行分组,并根据某些过滤提供一些汇总数据。当前,我知道如何实现查询的唯一方法是使用多个子查询,这似乎效率很低。假设我有下表:

user_id  event_type  value 
      1       click      4 
      2       click      2 
      1       click      1 
      4       close      5 
      2        open      3 

我想按 user_id分组数据并汇总以下信息: max_valuemin_click_value。基于示例表的能力,这是我希望看到的结果:
user_id  max_value  min_click_value 
      1          4                1 
      2          3                2 
      4          5             null 

有没有子查询的方式来完成此操作?到目前为止,这是可行的,但感觉效率很低:
SELECT t1.user_id, max_value, min_click_value 
(SELECT user_id, MAX(value) as max_value  
FROM my_table 
GROUP BY user_id) as t1 
LEFT JOIN 
(SELECT user_id, MIN(value) as min_click_value  
FROM my_table  
WHERE event_type = "click"  
GROUP BY user_id) as t2 
WHERE t1.user_id = t2.user_id 

请您参考如下方法:

使用条件聚合:

select user_id, max(value) as max_value 
       min(case when event_type = 'click' then value end) as min_click_value 
from my_table 
group by user_id; 


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!