在Oracle SQL中的一个查询中显示3个不同的查询

在Oracle SQL中的一个查询中显示3个不同的查询,sql,oracle,oracle-sqldeveloper,Sql,Oracle,Oracle Sqldeveloper,目前我正在处理包含 顾客 -> CUSTOMER_ID NAME ADDRESS WEBSITE CREDIT_LIMIT 命令 -> ORDER_ID CUSTOMER_ID STATUS SALESMAN_ID ORDER_DATE 订购商品 -> ORDER_ID ITEM_ID PRODUCT_ID QUANTITY UNIT_PRICE 我想创建一个要显示的SQL查询 总订单金额超过所有订单平均金额的客户数量, 总订单金额低于所有订单平均金额的客户数量, 没有订

目前我正在处理包含

顾客

->
CUSTOMER_ID
NAME
ADDRESS
WEBSITE
CREDIT_LIMIT
命令

->
ORDER_ID
CUSTOMER_ID
STATUS
SALESMAN_ID
ORDER_DATE
订购商品

->
ORDER_ID
ITEM_ID
PRODUCT_ID
QUANTITY
UNIT_PRICE
我想创建一个要显示的SQL查询

总订单金额超过所有订单平均金额的客户数量, 总订单金额低于所有订单平均金额的客户数量, 没有订单的客户数和客户总数。 客户总数 这是我目前为止的尝试,我知道这还不够

我现在只是想得到更简单查询的输出,所以我得到了3,4的正确输出。但是1,2。。。我尝试了一些查询,但没有成功

如果你能帮我做1,2,我会很感激的

如果有人能回答我的问题,我将不胜感激

期望输出

Report
------------------------------------------
Number of customers with total purchase amount over average: (number)
Number of customers with total purchase amount below average: (number)
Number of customers with no orders: (number)
Total number of customers: (number)

您需要按如下方式使用windows功能:

SELECT COUNT(DISTINCT CUSTOMER_ID) FROM
(SELECT CUSTOMER_ID,
       SUM(ORDER_TOTAL) OVER (PARTITION BY ORDER_ID) AS CUST_TOTAL,
       AVG(ORDER_TOTAL) OVER () AS AVG_ALL
FROM
(SELECT C.CUSTOMER_ID,
       O.ORDER_ID,
       SUM(OI.UNIT_PRICE*OI.QUANTITY) AS ORDER_TOTAL
  FROM CUSTOMERS C
  JOIN ORDERS O ON O.CUSTOMER_ID = C.CUSTOMER_ID
  JOIN ORDER_ITEMS OI ON OI.ORDER_ID = O.ORDER_ID
GROUP BY C.CUSTOMER_ID,
         O.ORDER_ID))
WHERE CUST_TOTAL > AVG_ALL -- point 1
--WHERE CUST_TOTAL < AVG_ALL -- point 2

首先,当您的问题是关于Oracle时,请不要标记SQL Server:其次,请向我们展示您的尝试。让我们可以方便地为您提供帮助-向我们展示一些示例表数据以及以格式化文本而不是图像的形式显示的预期结果。这读起来像是家庭作业。你试过什么了吗?你面临的问题是什么?哇,非常感谢你的评论!!我为我的问题感到抱歉。这是我第一次在这里提出问题。所以请跟我说说,它读起来确实像家庭作业。所需的输出格式对于任何实际应用程序来说都是奇怪的——SQL应该使用报告工具以这种方式返回要格式化的数字数据。看起来有一些奇怪的东西被添加到了让某人展示某项技能上。谢谢你的帮助!虽然我无法获得我想要的输出,但我从您的解决方案中学到了很多!
SELECT COUNT(DISTINCT CUSTOMER_ID) FROM
(SELECT CUSTOMER_ID,
       SUM(ORDER_TOTAL) OVER (PARTITION BY ORDER_ID) AS CUST_TOTAL,
       AVG(ORDER_TOTAL) OVER () AS AVG_ALL
FROM
(SELECT C.CUSTOMER_ID,
       O.ORDER_ID,
       SUM(OI.UNIT_PRICE*OI.QUANTITY) AS ORDER_TOTAL
  FROM CUSTOMERS C
  JOIN ORDERS O ON O.CUSTOMER_ID = C.CUSTOMER_ID
  JOIN ORDER_ITEMS OI ON OI.ORDER_ID = O.ORDER_ID
GROUP BY C.CUSTOMER_ID,
         O.ORDER_ID))
WHERE CUST_TOTAL > AVG_ALL -- point 1
--WHERE CUST_TOTAL < AVG_ALL -- point 2