首页 > 解决方案 > 编写此代码的另一种方法是什么?SQL中的任何快捷方式?

问题描述

我使用 SQL 的第一周,在课堂上,我们将完成一些任务。您能否建议如何通过将这段代码编写得更短一点(如果可能)来消除时间。

任务:每位员工的最佳客户

创建一个查询,检索每位员工花费超过 5,000 美元的每位客户的总销售额(提示:使用数据库中已有的 Order Subtotals 查询)。结果应按员工姓氏升序排序,然后按每个员工的总降序排序。

SELECT Employees.EmployeeID, LastName, FirstName, CompanyName, 
cast(Sum((unitprice-(unitprice*discount))*quantity)as decimal (18,2)) AS SumOfSubtotal
FROM Orders

JOIN Customers ON Orders.CustomerID = Customers.CustomerID
JOIN [Order Details] ON [Order Details].OrderID = [Orders].OrderID
JOIN Employees ON Orders.EmployeeID=Employees.EmployeeID  

GROUP BY Customers.CompanyName, Employees.EmployeeID, Employees.LastName, Employees.FirstName
HAVING SUM((UnitPrice-(UnitPrice*discount))*Quantity) > 5000
ORDER BY Employees.LastName, SUM((UnitPrice-(UnitPrice*discount))*Quantity) DESC

标签: mysqlsql

解决方案


做客户 c 订单 o 员工 e 订单详情 od 之类的盟友。

SELECT E.EmployeeID, LastName, FirstName, CompanyName, 
cast(Sum((unitprice-(unitprice*discount))*quantity)as decimal (18,2)) AS SumOfSubtotal
FROM Orders O

JOIN Customers C ON O.CustomerID = C.CustomerID
JOIN [Order Details] OD ON OD.OrderID = O.OrderID
JOIN Employees E ON O.EmployeeID=E.EmployeeID  

GROUP BY C.CompanyName, E.EmployeeID, E.LastName, E.FirstName
HAVING SUM((UnitPrice-(UnitPrice*discount))*Quantity) > 5000
ORDER BY E.LastName, SUM((UnitPrice-(UnitPrice*discount))*Quantity) DESC

推荐阅读