[英]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%的糖果……還有更多。
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.