通过两个表中的值计算查询中的值
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
表达式。
我有这样的产品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
表达式。