假设我有一个包含以下列的订单表:
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
答案 0 :(得分:0)
这是一种方法。使用汇总来计算每个ScheduleB
和OrderId
组合的总价。然后保持组合总数超过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;
感谢Cha
和Gordon
让我指向正确的方向。