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;