查询查询使用别名聚合函数时,SQL查询DBMS实际执行

时间:2017-04-03 02:40:23

标签: sql sql-server

我正在制作一个三步作业问题,我在最后一步感到难过。为了理所当然的最后一步,我将发布整个问题,包括前两个步骤的解决方案:

前两步的问题和解决方案

创建名为TRIP_INVENTORY的视图。它包括州和每个州的旅行总数。使用UNITS作为每个州的总行程数的列名。按州分组和排序。

一个。编写并执行CREATE VIEW命令以创建TRIP_INVENTORY视图。

CREATE VIEW TRIP_INVENTORY AS
SELECT STATE, COUNT(TRIP_ID) AS UNITS
FROM TOURS_TRIP
GROUP BY STATE

湾编写并执行命令以检索具有超过10次跳闸的每个状态的状态和单位。

SELECT STATE, UNITS
FROM TRIP_INVENTORY
WHERE UNITS > 10

让我难倒的步骤

℃。编写并执行DBMS实际执行的查询。

这是我提出的不成功的查询:

SELECT STATE, COUNT(TRIP_ID) AS UNITS
FROM TOURS_TRIP
WHERE UNITS > 10
GROUP BY STATE

问题是WHERE子句中不能引用UNITS列别名。我也不能在WHERE子句中使用聚合函数。我很确定我需要使用子查询,但我无法弄清楚如何构造约束,以便它们将使用嵌套查询的结果删除不必要的状态。

任何人都可以提供任何见解吗?

2 个答案:

答案 0 :(得分:1)

取决于实施,但

a) 
SELECT STATE, COUNT(TRIP_ID) AS UNITS
FROM TOURS_TRIP
GROUP BY STATE
having count(trip_id) > 10

b) 
Select state, units from (
  SELECT STATE, COUNT(TRIP_ID) AS UNITS
  FROM TOURS_TRIP
  GROUP BY STATE
) temp (state,units) 
where units > 10

答案 1 :(得分:0)

应该是

  SELECT STATE, COUNT(TRIP_ID) AS UNITS
    FROM TOURS_TRIP
    GROUP BY STATE
    having COUNT(TRIP_ID) > 10