SQL语句 - 基于列类型的总和

时间:2014-01-07 04:40:45

标签: mysql sql

假设我有一个包含以下列的订单表:

Model
Quantity
Price
ScheduleB
OrderID

可以有多个Model具有相同的ScheduleB分类。我需要一个SQL语句,它只返回一个记录,其中所有Quantity类似分组Price分类的总价格(Model * ScheduleB)大于$ 2500 OrderID。有数百种不同的ScheduleB分类可能。因此,您在OrderID = 10054表中可能会看到的示例如下:

+-------------------------------------------+
| Model | Qty | Price | ScheduleB | OrderID |
+-------------------------------------------+
Dr1625, 2, $1298.87, 1029202938, 10054
Dr1624, 1, $123.87, 1029202930, 10054
Dr1623, 5, $2499.87, 1029202931, 10054
Dr1622, 3, $600.87, 1029202938, 10054
Dr1621, 1, $3298.87, 1029202938, 10054

ScheduleB等于1029202938的记录总计超过$ 2500,我希望返回以下内容:

+-------------------------------------------+
| Model | Qty | Price | ScheduleB | OrderID |
+-------------------------------------------+
Dr1625, 2, $1298.87, 1029202938, 10054
Dr1622, 3, $600.87, 1029202938, 10054
Dr1621, 1, $3298.87, 1029202938, 10054

基本上,我只想显示一张表中的记录,其中相同ScheduleB分类的特定OrderID的总价格大于$ 2500。可以在MYSQL中使用SQL语句吗?

编辑: 这是我用来获取上述列(以及其他几个)的SQL语句:
select brands.Brand, products.Model_PartNumber, categories.CategoryDescription, (Select Sum(Quantity) From orderitems where OrderID = 10054 AND ProductID = products.ProductID Group BY ProductID) as Quantity, orderitems.ItemPrice, brands.CountryOrigin, categories.ScheduleB, products.Weight, products.WeightIn from orderitems INNER JOIN products ON products.ProductID = orderitems.ProductID INNER JOIN brands ON products.BrandID = brands.BrandID LEFT JOIN productcategories ON productcategories.ProductID = products.ProductID INNER Join categories ON productcategories.CategoryID = categories.CategoryID WHERE orderitems.OrderID = 10054 Group By products.Model_partNumber

3 个答案:

答案 0 :(得分:0)

这是一种方法。使用汇总来计算每个ScheduleBOrderId组合的总价。然后保持组合总数超过2,500美元。用它来过滤原始记录:

select o.*
from orders o join
     (select OrderId, ScheduleB, sum(qty * price) as total
      from orders
      group by OrderId, ScheduleB
     ) os
     on o.orderId = os.orderId and
        o.ScheduleB = os.ScheduleB and
        total >= 2500;

答案 1 :(得分:0)

是的,可以做到:

Select 
Model
,Quantity
,Price
,ScheduleB
,OrderID
From Table1
WHERE ScheduleB IN 
  (SELECT ScheduleB FROM Table1 GROUP BY ScheduleB HAVING SUM(Quantity * Price) > 2500)

答案 2 :(得分:0)

以下SQL语句可以解决这个问题:

Select ScheduleB from (select (Select Sum(Quantity) From orderitems where OrderID = ? AND ProductID = products.ProductID Group BY ProductID) as Quantity, orderitems.ItemPrice, categories.ScheduleB from orderitems INNER JOIN products ON products.ProductID = orderitems.ProductID LEFT JOIN productcategories ON productcategories.ProductID = products.ProductID INNER Join categories ON productcategories.CategoryID = categories.CategoryID WHERE orderitems.OrderID = ? Group By products.ProductID) as table1 Group by ScheduleB Having SUM(Quantity * ItemPrice) > 2500;

感谢ChaGordon让我指向正确的方向。

相关问题