针对客户订单问题的SQL解决方案

 
   | |

导读:本文为专家针对客户订单问题的SQL解决方案,解决了如何在统计总数或首行后选择最大值的问题。

关键词:Oracle Oracle SQL SQL解决方案 订单问题SQL解决方案

正在加载数据... 【TechTarget中国原创】我如何在统计总数或首行后选择最大值……,行数=1的函数不适合我。这是一个很经典的问题:“找出订单最多的客户并计算出总的订单数量。”你尝试的解决方案有一些问题。GROUP BY只有在客户表仅仅包含那些列的情况下才能运行……

【TechTarget中国原创】问:我如何在统计总数或首行后选择最大值?

 


Select Customer. *, SUM(Quantity) as Total 
    from Customer, Orders o1
    where customer.cust_ID = o1.cust_ID 
    and quantity IN 
    (Select Quantity from orders o2 
    where o1.cust_ID = o2.cust_ID) 
    group by customer.cust_ID, cust_name, Region, Phone 
    order by Total desc;

  行数=1的函数不适合我。

  答:这是一个很经典的问题:“找出订单最多的客户并计算出总的订单数量。”

  你尝试的解决方案有一些问题。GROUP BY只有在客户表仅仅包含那些列的情况下才能运行。这也就是用 "select star"的直接结果,即所有的列。用了这个符号,所有的列都不能聚集,他们必须在GROUP BY字句中出现,否则你就会出现句法错误。(除非你用的是MySQL。在MySQL中可能会正确运行。详细请查看《揭秘GROUP BY》,注意这篇文章属于高级级别类。)

  避免这个问题的一种方法就是在子查询中“下拉”集合,所以在外部查询中没有GROUP BY子句,并且你还可以使用"select star"。

  你的"quantity IN (correlated subquery)"这一条件没有任何意义。实际上,它只表示所有和这个客户的订单数量相等的一些订单。你只需要忽略它,因为每个客户订单数量也就是你要找的客户订单数量。而你要找的是所有客户订单的数量,然后选择整个数量中最大的那些和它所属的客户。

  最后,"行数= 1" 这个函数才会起作用,但是每个数据库系统的不同决定它使用的不同的句法。可能是TOP或者LIMIT,,或者FETCH FIRST等等(如果你采用这种方法的话,你可以查询SQL参考手册)。

  有没有其他的解决方案?有。

 

SELECT Customer.cust_ID  
         , Customer.cust_name
         , Customer.Region   
         , Customer.Phone    
         , o1.Total
      FROM Customer
    INNER
      JOIN ( SELECT cust_ID
                  , SUM(quantity) AS Total 
               FROM Orders
             GROUP
                 BY cust_ID ) AS o1
        ON o1.cust_ID = Customer.cust_ID
     WHERE o1.Total = 
           ( SELECT MAX(Total) FROM 
           ( SELECT cust_ID
                  , SUM(quantity) AS Total 
               FROM Orders
             GROUP
                 BY cust_ID ) AS o2 ) )

  我告诉你这也不会运行。如果你想交你的家庭作业的话,你就要自己决定它是不是正确。最好的方法就是进行测试。

 
查看全文
 
 
 
 
 

Oracle SQL

 
Oracle Application Express(Oracle APEX)设计的一个主要目标是:快速构建基于Oracle数据库的Web应用程序。
 
SELECT子句通常是一个SELECT语句的第一个子句。它标识出你所想要包含到结果集中的列。这些列是从在FROM子句中指定的基表中返回的。
 
没有ORDER BY子句,Oracle不会保证行显示的顺序。它们可能是按照你想要的顺序排列,但也可能不是。
 
Toad For Oracle的产品策略就是为Oracle开发一款工具,它可以满足不同人的不同需求,比如DBA、开发人员、分析师以及管理者等等。
 
据Toad For Oracle产品经理John Pocknell所说,这次发布的Toad 10致力于生产力的概念,其中包括了:灵活性、易用性、自动化和协作等内容。
 

登录TechTarget中国

关闭
本服务仅向TechTarget中国的会员开放,请登录或立即免费注册
电子邮件地址:
请输入您的电子邮件地址
密码:
下次自动登录