【问题标题】:How to get the value of a column's entry where the other column's value in maximum in SQL?如何获取列条目的值,其中其他列在 SQL 中的值最大?
【发布时间】:2017-10-11 16:59:20
【问题描述】:

所以我有两张桌子

一个是包含以下列的“订单”

  1. OrderID (int)(主键)
  2. 客户 ID (nchar(5))
  3. OrderDate(日期时间)

其次是包含以下列的“订单详情”

  1. 订单 ID(整数)
  2. 产品ID(整数) 1 和 2 组合是此表的主键。
  3. 单价(金钱)
  4. 数量(smallint)
  5. 折扣(真实)

现在编写一个查询,找出订单中价格最高的产品的 OrderId、ProductId、OrderDate 和 UnitPrice。

产品的价格计算为 (UnitPriceQuantity - DiscountUnitPrice*Quantity)。 必须对“Orders”中的每个 OrderID 执行该操作。

我正在放置示例数据。这里是输入表“订单”-

OrderID  CustomerID  OrderDate

1000     1           11-09-2016
1001     1           12-10-2016

这里是另一个输入表“订单详情”-

OrderID  ProductID  UnitPrice  Quantity  Discount

1000     11         5          15        0.0
1000     13         25         2         0.0
1000     14         7          11        0.0
1001     5          30         3         0.0
1001     6          50         2         0.12

这是预期的输出

OrderID  ProductID  OrderDate   UnitPrice

1000     14         11-09-2016  7
1001     5          12-10-2016  30

我已经尝试过使用 Joins。这是我尝试过的查询

DECLARE @OID INT=10248;

SELECT d.OrderID,d.ProductID,d.UnitPrice 
INTO #Temp3
from [Order Details] d
INNER JOIN
(Select TOP 1 OrderID,ProductID,MAX(UnitPrice*Quantity-UnitPrice*Discount*Quantity)as Maxi from [Order Details] 

    where OrderID=@OID  
    GROUP BY  OrderID,ProductID
     ORDER BY Maxi DESC) e ON e.OrderID=d.OrderID and e.ProductID=d.ProductID;

select T.OrderID,T.ProductID,o.OrderDate,T.UnitPrice
from Orders o
INNER JOIN #Temp3 T
ON o.OrderID=T.OrderID;

这个查询的唯一问题是我必须提供 OrderID。我希望它为“订单”中的每个 OrderID 执行

【问题讨论】:

  • good..阅读joins 并先尝试一下,如果遇到困难,请发布问题。
  • Edit您的问题并添加一些示例数据和基于该数据的预期输出。 Formatted textno screen shotsedit 您的问题不要在 cmets 中发布代码或其他信息。
  • 根据问题中的语法添加了sql-servertsql标签

标签: sql sql-server tsql


【解决方案1】:

因此,您希望对每个订单的订单详细信息进行排名(并且只显示排名最高的记录,即总价最高的记录)。

select o.orderid, od.productid, o.orderdate, od.unitprice 
from orders o
join
(
  select
    orderid, 
    productid, 
    unitprice,
    rank() over (partition by orderid order by unitprice * quantity desc) as rnk
  from order_details
) od on od.orderid = o.orderid and od.rnk = 1
order by o.orderid;

【讨论】:

    【解决方案2】:


    您可以使用以下查询

    SELECT OD.OrderId, OD.ProductId, O.OrderDate, OD.UnitPrice, OD1.price  FROM Orders O
    INNER JOIN Order_Details OD
    ON (O.OrderID = OD.OrderID)
    INNER JOIN (SELECT MAX(UnitPrice*Quantity) as price ,OrderID ,ProductID FROM Order_Details 
    GROUP BY OrderID ,ProductID) OD1 
    ON (O.OrderID = OD1.OrderID);
    

    【讨论】:

    • 这个查询没有给出预期的输出。请再看一遍这个问题。我添加了示例输入和输出。
    猜你喜欢
    • 1970-01-01
    • 2021-11-16
    • 1970-01-01
    • 2014-04-23
    • 2018-08-27
    • 1970-01-01
    • 2021-02-19
    • 2016-11-13
    • 1970-01-01
    相关资源
    最近更新 更多