SQL查询车辆行驶里程

SQL查询车辆行驶里程,sql,Sql,我正试图为我的大学课程设计一个车队管理数据库 目前,我的查询搜索我创建的“视图”,并根据年份计算员工的总里程,方法是从他们的起始里程中减去他们旅程的结束里程,这将起作用并在结果中对他们进行分组。 但是,不管我怎么努力,我都不能从我创造的结果中质疑员工每年做的超过25000英里的事情。我不确定是否可以查询别名列的结果 SELECT Assigned_Vehicle_id "Assigned Vehicle id", Payroll_Number "Payroll Number",

我正试图为我的大学课程设计一个车队管理数据库

目前,我的查询搜索我创建的“视图”,并根据年份计算员工的总里程,方法是从他们的起始里程中减去他们旅程的结束里程,这将起作用并在结果中对他们进行分组。 但是,不管我怎么努力,我都不能从我创造的结果中质疑员工每年做的超过25000英里的事情。我不确定是否可以查询别名列的结果

SELECT Assigned_Vehicle_id "Assigned Vehicle id", 
       Payroll_Number "Payroll Number", First_Name "First Name",
       Surname, Vehicle_Registration "Vehicle Registration",
       Manufacturer_Name "Manufacturer Name", Model_Name "Model Name",
       SUM(End_Miles - Start_Miles) "Total Miles Driven"
  FROM Destinations
 WHERE YEAR(Start_Date) = 2016
 GROUP BY Assigned_Vehicle_id, Payroll_Number, First_Name, Surname,
       Vehicle_Registration, Manufacturer_Name, Model_Name;

试试这个。注意groupby后面的HAVING子句

 SELECT Assigned_Vehicle_id "Assigned Vehicle id", 
 Payroll_Number "Payroll Number", First_Name "First Name", Surname,
 Vehicle_Registration "Vehicle Registration", Manufacturer_Name 
 "Manufacturer Name",
 Model_Name "Model Name", SUM(End_Miles - Start_Miles) "Total Miles Driven" 
 FROM Destinations 
 WHERE YEAR(Start_Date) = 2016 
 GROUP BY 
 Assigned_Vehicle_id, Payroll_Number, First_Name, Surname, 
 Vehicle_Registration, Manufacturer_Name, Model_Name
 HAVING SUM(End_Miles - Start_Miles) > 25000

在某些方面,his中建议的HAVING子句是好的、简单的,并且很可能是预期的,尽管它涉及到两次写出表达式,而不是允许您使用别名。我相信,有些DBMS允许您在后续子句(如GROUP BY或HAVING子句)中使用输出列别名,但标准不允许,因此大多数DBMS也不允许

然而,还有另一种可能有效的替代方案:

SELECT "Assigned Vehicle id", 
       "Payroll Number", "First Name",
       Surname, "Vehicle Registration",
       "Manufacturer Name", "Model Name",
       "Total Miles Driven"
  FROM (SELECT Assigned_Vehicle_id "Assigned Vehicle id", 
               Payroll_Number "Payroll Number", First_Name "First Name",
               Surname, Vehicle_Registration "Vehicle Registration",
               Manufacturer_Name "Manufacturer Name", Model_Name "Model Name",
               SUM(End_Miles - Start_Miles) "Total Miles Driven"
          FROM Destinations
         WHERE YEAR(Start_Date) = 2016
         GROUP BY Assigned_Vehicle_id, Payroll_Number, First_Name, Surname,
               Vehicle_Registration, Manufacturer_Name, Model_Name
       ) AS Mileages_In_2016
 WHERE "Total Miles Driven" > 25000

这会将原始查询作为FROM子句中的“子查询”运行,允许您在外部查询中针对外部查询中的
“行驶总里程”
列编写筛选器。

您是否尝试过
HAVING
子句?欢迎使用堆栈溢出。请注意,在这里说“谢谢”的首选方式是投票选出好的问题和有用的答案(一旦你有足够的声誉这么做),并接受对你提出的任何问题最有用的答案(这也会给你的声誉带来一点提升)。请看页面,大家好,我只是想说一声非常感谢,我非常感谢,你们的两个解决方案都非常有效,并给了我我所需要的结果。我想我就快到了,只是缺少最后一点语法知识。我正在考虑将我的查询结果输出到一个表中,接下来是否需要研究“INSERT into语句”?再次感谢你