问:我如何在统计总数或首行后选择最大值? Select Customer. *, SUM(Quantity) as Total from Customer, Orders o1 where customer.cust_ID = o1.cust_ID and quantity IN ……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
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 ) ) |
我告诉你这也不会运行。如果你想交你的家庭作业的话,你就要自己决定它是不是正确。最好的方法就是进行测试。
翻译
相关推荐
-
甲骨文自治数据库亮相 带来云计算新希望
早前甲骨文还不在云计算公司之列,而现在该公司正在迅速弥补其失去的时间。甲骨文的云计算核心是甲骨文自治数据库(O […]
-
2017年12月数据库流行度排行榜 定格岁末排名瞬间
数据库知识网站DB-engines最近更新的2017年12月份数据库流行度排名情况是否能提供更多的看点呢?TechTarget数据库网站将与您分享12月份的榜单排名情况,让我们拭目以待。
-
2017年11月数据库流行度排行榜 半数以上数据库积分减少
数据库知识网站DB-engines更新了2016年11月份的数据库流行度排行榜。TechTarget数据库网站将与您一同关注11月份的榜单排名情况。
-
控制合约 不再畏惧Oracle
许多公司都与Oracle有无限制授权协议,他们害怕离开这个协议,所以就证明他们在使用Oracle的软件,即使因为需求单独购买部分授权许可也可能总体是省钱的。