通过两个表中的值计算查询中的值

Calculate value in the query by values from two tables

我有这样的产品table

PRODUCT_ID  PACK_SIZE   PACK_PRIZE

 3000           5       2.5

 3001           5       2.5

 3002           5       2.5

 3003           5       2.5

订单table

order_id     client_id 

75001   1024

75002   1033

75003   1030

项目Table

ORDER_ID    PRODUCT_ID  NUMBER_ORDERED

 75001  3936    2

 75001  3557    5

 75001  3012    3

 75001  3236    4

客户Table

CLIENT_ID   LAST_NAME    STATUS

 1021    Smith          private

 1022    Williams       corporate

 1023    Browne         private

 1024    Tinsell        corporate

这些是示例数据我添加这些只是为了显示示例数据。 我想 select 已完成具有更高价值的订单的前 2 位私人客户。

我在 select 处理最大销售量的订单时遇到问题。

这就是我想要做的。

在此我尝试获取客户端 IDS

 SELECT CLIENTS.CLIENT_ID
 FROM ORDERS
 INNER JOIN ITEMS ON ORDERS.ORDER_ID=ITEMS.ORDER_ID
 INNER JOIN PRODUCTS ON ITEMS.PRODUCT_ID =PRODUCTS.PRODUCT_ID
 INNER JOIN CLIENTS ON ORDERS.CLIENT_ID = CLIENTS.CLIENT_ID
 WHERE ( )

在此我正在尝试 select 前 2 个订单

 SELECT TOP 2 ORDERS.ORDER_ID FROM ORDERS
 INNER JOIN ITEMS ON ORDERS.ORDER_ID=ITEMS.ORDER_ID
 INNER JOIN PRODUCTS ON ITEMS.PRODUCT_ID =PRODUCTS.PRODUCT_ID
 WHERE ((PRODUCTS.PACK_PRIZE/PRODUCTS.PACK_SIZE)*(ITEMS.NUMBER_ORDERED));

给我错误 FROM 关键字未在预期位置找到。

我想要做的是 select 总计最高且不是来自同一客户的订单的订单 ID,总计应通过除以 pack_price 找到单价来计算从 pack_size 乘以 number_ordered 来自具有匹配订单 ID 的项目 table。订购的客户应该是企业客户。

我正在使用 Oracle 11g。

pack_prize是数字pack_size是数字 number_ordered 是数字数据类型

TOP 在 oracle 中不工作。您可以使用虚拟列 ROWNUM 或函数 ROW_NUMBER() OVER() 来获得类似的功能。

Oracle 不支持 top 2。而是使用 rownum 和子查询:

WITH CTE as (
      SELECT ORDERS.ORDER_ID, PRODUCTS.PACK_PRIZE, PRODUCTS.PACK_SIZE, ITEMS.NUMBER_ORDERED
      FROM ORDERS INNER JOIN
           ITEMS
           ON ORDERS.ORDER_ID = ITEMS.ORDER_ID INNER JOIN
           PRODUCTS
           ON ITEMS.PRODUCT_ID = PRODUCTS.PRODUCT_ID
     )
SELECT ORDER_ID
FROM (SELECT CTE.*
      FROM CTE
      ORDER BY (PACK_PRIZE/PACK_SIZE) * NUMBER_ORDERED DESC
     ) t
WHERE rownum <= 2;

我猜你用来确定最佳行的是奇怪的 where 表达式。