簡體   English   中英

SQL-僅包含某些項目的訂單

[英]SQL- Finding Orders with only certain items

我有一個訂單表,每個訂單中的每個項目都有一行。 訂單號在每一行中(當然不是唯一的)。 項目編號是唯一的。 我需要查找僅包含某種類型商品的100%的訂單-假設說“糖果”。 因此,如果一個訂單中有10個項目,而所有10個項目都是糖果,我希望從這些行中獲取有關該訂單的一些信息。 如果10項訂單中有9項糖果和1項鞋,我不希望該訂單中的任何信息。 除了非常基礎的計算,我的SQL技能非常中等。 那我該怎么做呢? 謝謝!

樣品orders表:

ORD_NUM    ITEM    CATGRY    COST
123        567        CANDY     $4 
123        489        CANDY     $5 
123        990        CANDY     $9 
987        222        SHOES     $10 
987        990        CANDY     $9 
987        567        CANDY     $4 

預期成績:
訂單數:2個含100%糖果的訂單:1個含100%糖果的訂單成本:$ 18

除了如何找到糖果項目外,我沒有其他查詢,但我正在獲取所有糖果。

我添加了樣本數據,所以我們有2個訂單,其中包含100%的糖果……還有更多。

工作SQL字段

SELECT ORD_NUM, sum(cost) as Sum_Cost
FROM ORDERS
GROUP BY ORD_NUM
HAVING COUNT(1) = count(Case when Catgry = 'CANDY' then 1 end);

如果您需要匯總全部,則可以將此查詢包裝在僅計算order_nums的外部查詢中。

SELECT COUNT(ORD_NUM), sum(Sum_cost) as Sum_cost
FROM (SELECT ORD_NUM, sum(cost) as Sum_Cost
      FROM ORDERS
      GROUP BY ORD_NUM
      HAVING COUNT(1) = count(Case when Catgry = 'CANDY' then 1 end)
     ) OrderCost;

工作原理:

我們使用簡單的匯總來獲取訂單中所有項目以及糖果中所有項目的計數。 我們比較這兩個值,如果它們匹配,那么我們知道訂單是100%糖果。 如果它們不匹配,那么我們知道該訂單至少包含1個非糖果商品,並且可以排除整個訂單。

由於我不確定您是希望將每個訂單的成本單獨累加還是將所有訂單的費用累加,因此我提供了兩種方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM