Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 获取两个表的两列的乘积之和_Sql_Oracle_Oracle11g_Top N - Fatal编程技术网

Sql 获取两个表的两列的乘积之和

Sql 获取两个表的两列的乘积之和,sql,oracle,oracle11g,top-n,Sql,Oracle,Oracle11g,Top N,我有这样的产品表 PRODUCT_ID PACK_SIZE PACK_PRIZE 3000 5 2.5 3001 5 2.5 3002 5 2.5 3003 5 2.5 订单表 order_id client_id 75001 1024 75002 1033 75003 1030 项目表 ORDER_ID PRODUCT_I

我有这样的产品表

PRODUCT_ID  PACK_SIZE   PACK_PRIZE
 3000           5       2.5
 3001           5       2.5
 3002           5       2.5
 3003           5       2.5
订单表

order_id     client_id 
75001   1024
75002   1033
75003   1030
项目表

ORDER_ID    PRODUCT_ID  NUMBER_ORDERED
 75001  3936    2
 75001  3557    5
 75001  3012    3
 75001  3236    4
客户表

CLIENT_ID   LAST_NAME    STATUS
 1021    Smith          private
 1022    Williams       corporate
 1023    Browne         private
 1024    Tinsell        corporate
这些是示例数据,我刚刚添加这些只是为了显示示例数据。 在这里,我想选择订单总额最高的前5位客户

我想选择状态为“公司”且订单量最高的客户

换句话说,我想选择总订单金额较高的客户的客户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;
但这里我得到的订单最高,所以同一客户的订单也在这里

我想选择订单总额最高的前5位客户

应选择所有公司客户。 然后计算每个客户所有订单的总金额 我想选择具有最高10个值的客户端。
我正在使用oracle 11g。

只要使用类似的工具,并根据您的特殊需要进行调整即可。没有比这更复杂的必要了。你会明白的

您所需要的只是聚合函数。看


你的态度有点过于复杂。。。你应该看看GROUPBY子句。基本上,将所有表连接到各自的ID上,并与GROUP BY一起使用SUM函数并对其进行排序。然后选择您想要的最高订单数量。我正在计算单个订单的总计从两个表中获取数据,然后我要计算每个用户的总订单量。请参考我的表格。所以是金额,而不是您仍在发布的订单金额。对吗?相应地更新了答案。这个想法仍然是一样的。金钱就是成本,每一个订单的成本就是每一个订单的成本,而这个订单包含很多产品。一个人做很多订单我想要一个人所有订单的总金额。是的,这应该可以做到。Joning这些表将导致行集每行包含一项。通过GROUPBY子句对每个客户机进行汇总,将得到所需的数字。假设我得到了订购数量*包装奖/包装尺寸的正确想法。
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;