【发布时间】:2019-04-17 07:11:14
【问题描述】:
我对 SQL 并不陌生,但由于缺少一些知识,我感觉自己从未完全理解 SQL。我们都知道在使用group by的时候需要用到聚合函数,比如我们有一个orderdetails表(orderid和productid的组合键),写一个查询返回总价值(数量*单价)大于10000的订单,sql为:
select orderid, sum(qty*unitprice) AS totalvalue from Sales.OrderDetails
group by orderid
having sum(qty*unitprice) > 10000
我们知道选择发生在分组和拥有之后,所以当我来到
group by orderid
having sum(qty*unitprice) > 10000
我们已经按照 orderid 对所有记录进行了分组,并总结了所有成本,如果我们可以想象成这样:
orderid null(a column with no name but contains the total value)
123456 11000.00
987654 12184.00
然后是select子句:
select orderid, sum(qty*unitprice) AS totalvalue
因为我们已经有了 'have' 子句之后的结果, 那么为什么我们需要做 'sum(qty*unitprice)' 来再次做总和,这不是多余的吗?
另外一个让我很困扰的是:在写SQL的时候,select子句在from子句之前,这很不方便,因为你要获取列名的IntelliSense。当然,我可以先从 caluse 开始编写,然后“插入” select 子句,但它使所有内容都以一种逻辑倒退的方式进行。我是唯一有问题的人吗? ...奇怪:(
【问题讨论】:
标签: sql