获取两个表的两列的乘积之和
Get sum of multiplication of two columns of 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 总订单量最高的前 5 位客户。
我想select状态为公司且订单量最大的客户。
换句话说,我想要 select client_id 个总订单金额较高的客户。
在这里,我试图这样实现它。
WITH CTE as ( SELECT ORDERS.ORDER_ID, PRODUCTS.PACK_PRIZE, PRODUCTS.PACK_SIZE, ITEMS.NUMBER_ORDERED,
CLIENTS.STATUS,CLIENTS.CLIENT_ID,CLIENTS.FIRST_NAME,CLIENTS.LAST_NAME
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 CLIENTS.STATUS='corporate')
SELECT CLIENT_ID,FIRST_NAME,LAST_NAME,ORDER_ID,((PACK_PRIZE/PACK_SIZE) * NUMBER_ORDERED)AS Total
FROM (SELECT CTE.*
FROM CTE
ORDER BY SUM(PACK_PRIZE/PACK_SIZE) * NUMBER_ORDERED DESC
) t
WHERE rownum <= 5;
但是这里我得到的订单最多,所以同一客户的订单也进来了。
我想select总订单量最高的前5位客户。
所有公司客户都应该 selected。
然后应计算每个客户的所有订单的总金额
我想 select 具有最高 10 个值的客户。
我正在使用 Oracle 11g。
只需使用类似的东西并根据您的特定需要进行调整。这里没有比这更复杂的了。你会明白的。
您只需要聚合函数。参见 documentation。
select * from (
SELECT customer_id, sum(number_ordered*(pack_prize/pack_size) as totalvalue
FROM customers
natural join orders
natural join items
natural join products
group by customer_id order by totalvalue desc
) WHERE rownum <= 5;
我有这样的产品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 总订单量最高的前 5 位客户。
我想select状态为公司且订单量最大的客户。
换句话说,我想要 select client_id 个总订单金额较高的客户。
在这里,我试图这样实现它。
WITH CTE as ( SELECT ORDERS.ORDER_ID, PRODUCTS.PACK_PRIZE, PRODUCTS.PACK_SIZE, ITEMS.NUMBER_ORDERED,
CLIENTS.STATUS,CLIENTS.CLIENT_ID,CLIENTS.FIRST_NAME,CLIENTS.LAST_NAME
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 CLIENTS.STATUS='corporate')
SELECT CLIENT_ID,FIRST_NAME,LAST_NAME,ORDER_ID,((PACK_PRIZE/PACK_SIZE) * NUMBER_ORDERED)AS Total
FROM (SELECT CTE.*
FROM CTE
ORDER BY SUM(PACK_PRIZE/PACK_SIZE) * NUMBER_ORDERED DESC
) t
WHERE rownum <= 5;
但是这里我得到的订单最多,所以同一客户的订单也进来了。
我想select总订单量最高的前5位客户。
所有公司客户都应该 selected。 然后应计算每个客户的所有订单的总金额 我想 select 具有最高 10 个值的客户。 我正在使用 Oracle 11g。
只需使用类似的东西并根据您的特定需要进行调整。这里没有比这更复杂的了。你会明白的。
您只需要聚合函数。参见 documentation。
select * from (
SELECT customer_id, sum(number_ordered*(pack_prize/pack_size) as totalvalue
FROM customers
natural join orders
natural join items
natural join products
group by customer_id order by totalvalue desc
) WHERE rownum <= 5;