这一道题收获挺多。有很多细节性的问题需要注意。
比如,第一,group by()
后面的having()
中,一般只写聚合函数的过滤规则,其他所有的过滤条件都在where
语句中写出;
第二,再复杂一点的检索语句无非就是不断的套娃,一定要注意细节。
-- 先找出符合条件的id
-- 然后根据Id及相关过滤条件查找订单信息;
select *
from order_info
where user_id in (
select user_id
from (select user_id, count(product_name) as cnt
from order_info
where product_name in ('C++','Python','Java')
and status = 'completed'
and date > '2025-10-15'
group by user_id
) as a
where cnt >= 2)
and status = 'completed'
and date >= '2025-10-15'
and product_name in ('C++','Python','Java')
order by id;