You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Athena中查询不含'b'/'d'类商品的异常订单?

数据质量校验:找出无指定品类记录的异常订单

需求说明

需找出不存在item_category为'b'或'd'记录的订单:

  • 订单内只要有至少一条'b'/'d'品类的记录,即为正常订单
  • 完全没有此类记录的订单属于异常订单,需排查

示例异常订单

order_nbritem_categorysku
7a12342
7c89999

测试数据集

order_nbritem_categorysku
1a11111
1b888888
1a124235
2c124356
2a567567

正确结果应仅返回order_nbr=2,因为订单1包含'b'品类的记录。

原SQL的问题

原语句:

SELECT order_nbr FROM table
where item_category not in ('b', 'd')
group by order_nbr

该语句错误的原因是:它仅筛选出品类非'b'/'d'的记录再分组,但订单1中同时存在'b'和'a'的记录,其中'a'的记录会被筛选出来,导致订单1仍被返回,不符合需求。

正确SQL实现(适配Athena,支持CTE)

方法1:基于CTE分离正常/异常订单

对应你提供的伪代码逻辑,先收集所有正常订单,再排除得到异常订单:

WITH good_orders AS (
    SELECT DISTINCT order_nbr
    FROM your_table_name
    WHERE item_category IN ('b', 'd')
)
SELECT DISTINCT order_nbr
FROM your_table_name
WHERE order_nbr NOT IN (SELECT order_nbr FROM good_orders)

方法2:聚合函数直接判断

更简洁的方式,通过统计每个订单中'b'/'d'品类的记录数,判断是否为异常订单:

SELECT order_nbr
FROM your_table_name
GROUP BY order_nbr
HAVING COUNT(CASE WHEN item_category IN ('b', 'd') THEN 1 END) = 0

COUNT(CASE...)会统计订单内符合条件的记录数,等于0则说明该订单无'b'/'d'品类记录,属于异常订单。

内容的提问来源于stack exchange,提问作者ThomasRones

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 17:22:26