如何完成SQL查询:筛选30岁以上近半年下单≥3次的1名随机用户
完整SQL实现(以MySQL为例)
- 实现逻辑:
- 从订单表统计近6个月下单量≥3的用户ID,通过分组聚合+
HAVING子句过滤实现 - 和年龄大于30岁的用户表做内连接,取同时满足两个条件的用户交集
- 随机排序后取1条结果
- 从订单表统计近6个月下单量≥3的用户ID,通过分组聚合+
SELECT u.Name FROM users u -- 关联近6个月下单≥3的用户集合 INNER JOIN ( SELECT user_id FROM orders -- 此处create_time替换为订单表实际的下单时间字段名 WHERE create_time >= DATE_SUB(SYSDATE(), INTERVAL 6 MONTH) GROUP BY user_id HAVING COUNT(order_id) >= 3 ) o ON u.user_id = o.user_id -- 年龄过滤,TIMESTAMPDIFF计算年龄比DATEDIFF除法精度更高,避免闰年误差 WHERE TIMESTAMPDIFF(YEAR, u.birthday_at, SYSDATE()) > 30 -- 随机排序 ORDER BY RAND() -- 取1条结果 LIMIT 1;
- 其他数据库适配说明:
- PostgreSQL:随机排序改为
ORDER BY RANDOM(),近6个月时间条件改为create_time >= NOW() - INTERVAL '6 months' - SQL Server:随机排序改为
ORDER BY NEWID(),取第一条改为在SELECT后加TOP 1、删除末尾的LIMIT 1
- PostgreSQL:随机排序改为
内容的提问来源于stack exchange,提问作者Sergey S.
相关产品推荐
相关产品推荐

