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

编写SQL查询找出每个ID所有订单共有的物料

找出每个ID所有订单中均存在的物料

问题描述

需要编写SQL查询,从给定数据表中筛选出每个ID对应的所有订单里都存在的物料。

原始数据表

IDORDER_IDMATERIAL
'ID1'12'wood'
'ID1'12'gold'
'ID1'12'obsidian'
'ID1'68'wood'
'ID1'68'gold'
'ID1'68'obsidian'
'ID1'68'bedrock'
'ID2'138'glass'
'ID2'138'sandstone'
'ID2'138'wood'
'ID2'139'glass'
'ID2'139'sandstone'
'ID2'139'wood'
'ID2'139'concrete'

预期查询结果

IDMATERIAL
'ID1''wood'
'ID1''gold'
'ID1''obsidian'
'ID2''glass'
'ID2''sandstone'
'ID2''wood'

解决方案

思路

  1. 先统计每个ID对应的唯一订单总数;
  2. 再统计每个ID下,每个物料分别出现在多少个不同的订单中;
  3. 筛选出物料出现的订单数等于该ID总订单数的记录,这些就是所有订单都存在的物料。

SQL查询代码

WITH id_order_count AS (
    SELECT 
        ID,
        COUNT(DISTINCT ORDER_ID) AS total_orders
    FROM 
        your_table_name
    GROUP BY 
        ID
),
material_order_count AS (
    SELECT 
        ID,
        MATERIAL,
        COUNT(DISTINCT ORDER_ID) AS material_orders
    FROM 
        your_table_name
    GROUP BY 
        ID, MATERIAL
)
SELECT 
    moc.ID,
    moc.MATERIAL
FROM 
    material_order_count moc
JOIN 
    id_order_count ioc ON moc.ID = ioc.ID
WHERE 
    moc.material_orders = ioc.total_orders
ORDER BY 
    moc.ID, moc.MATERIAL;

代码说明

  • 第一个CTE id_order_count:计算每个ID拥有的唯一订单数量;
  • 第二个CTE material_order_count:计算每个ID下每个物料对应的唯一订单数量;
  • 最后将两个CTE关联,筛选出物料订单数等于ID总订单数的记录,得到目标结果。

内容的提问来源于stack exchange,提问作者annaa-ka

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 04:37:37