select Order_date, count(distinct user_id) as uv from
(select user_id, Order_date, row_number() over(partition by user_id order by Order_date) as new_tagfrom ord where date_diff(current_date(), Order_date)<=30
) t where new_tag=1
group by Order_date-备注 这是用row_number的方取出每一个用户在最近一个月内第一次购买的对应的时间,然后用new_tag 给这一天打上标识r
2.考察case when
SELECT Gender,
SUM(CASE WHEN '年龄'<20 THEN 1 ELSE 0 END) "20以下",
SUM(CASE WHEN '年龄'>=20 AND '年龄'<=40 THEN 1 ELSE 0 END) "20~40",
SUM(CASE WHEN '年龄'>40 THEN 1 ELSE 0 END) "40以上"
from user
GROUP BY Gender;
3.考察窗口函数
SELECT category,product,sum_sale
(SELECT *,row_number() over(PARTITION by category ORDER BY sum_sale DESC) rankFROM(SELECT category,product,sum(sale_num) sum_saleFROM ordGROUP BY category,product)t)t WHERE rank=1;