SQL选择错误

SQL选择错误,sql,Sql,我正在尝试获取两个随机城市之间价格最低的航班的航班id。最后一行出现错误 having子句中的未知列 当我尝试使用where/from时,错误显示: 组函数的使用无效 有什么想法吗 如果您需要基于订单的第一条记录,只需根据rdbms使用选择TOP 1或TAKE 1,并按您需要订购的字段进行订购 SQL SERVER 2008 SELECT f.flight_id FROM flights f JOIN flightsinfo AS i ON f.flight_code = i.flight_

我正在尝试获取两个随机城市之间价格最低的航班的
航班id
。最后一行出现错误

having子句中的未知列

当我尝试使用where/from时,错误显示:

组函数的使用无效


有什么想法吗

如果您需要基于订单的第一条记录,只需根据rdbms使用
选择TOP 1
TAKE 1
,并按您需要订购的字段进行订购

SQL SERVER 2008

SELECT f.flight_id 
FROM flights f 
JOIN flightsinfo AS i ON f.flight_code = i.flight_code
JOIN airports AS a ON i.dep_airport_id = a.airport_id 
JOIN cities as c ON a.city_id = c.city_id AND city_name = 'New York'
JOIN airports AS b ON i.arr_airport_id = b.airport_id
JOIN cities AS v ON v.city_id = b.city_id AND v.city_name = 'Budapest'
HAVING f.price = MIN(price)
MySQL

SELECT TOP 1
    f.flight_id
FROM
    flights f
    JOIN flightsinfo AS i ON f.flight_code = i.flight_code
    JOIN airports AS a ON i.dep_airport_id = a.airport_id
    JOIN cities AS c ON a.city_id = c.city_id
                        AND city_name = 'New York'
    JOIN airports AS b ON i.arr_airport_id = b.airport_id
    JOIN cities AS v ON v.city_id = b.city_id
                        AND v.city_name = 'Budapest'
ORDER BY 
    f.price

使用公共表表达式(cte)查找价格最低的航班。(如果平局,将返回两个航班。)

或者,JamieD77答案的ANSI SQL版本:

WITH CTE (flight_id, price) AS
(
SELECT f.flight_id, f.price
FROM flights f 
JOIN flightsinfo AS i ON f.flight_code = i.flight_code
JOIN airports AS a ON i.dep_airport_id = a.airport_id 
JOIN cities as c ON a.city_id = c.city_id AND city_name = 'New York'
JOIN airports AS b ON i.arr_airport_id = b.airport_id
JOIN cities AS v ON v.city_id = b.city_id AND v.city_name = 'Budapest'
)
select flight_id, price
from cte
where price = (select min(price) from cte)

带有TIES的
表示如果是tie,将返回多行

您不能在
where
子句中使用“裸”聚合函数,例如
min
。您可以只
按f.price选择前1个订单
您是否尝试过:让f.price=min(f.price)请标记使用的dbms。答案可能取决于它!
WITH CTE (flight_id, price) AS
(
SELECT f.flight_id, f.price
FROM flights f 
JOIN flightsinfo AS i ON f.flight_code = i.flight_code
JOIN airports AS a ON i.dep_airport_id = a.airport_id 
JOIN cities as c ON a.city_id = c.city_id AND city_name = 'New York'
JOIN airports AS b ON i.arr_airport_id = b.airport_id
JOIN cities AS v ON v.city_id = b.city_id AND v.city_name = 'Budapest'
)
select flight_id, price
from cte
where price = (select min(price) from cte)
SELECT 
    f.flight_id
FROM
    flights AS f
    JOIN flightsinfo AS i ON f.flight_code = i.flight_code
    JOIN airports AS a ON i.dep_airport_id = a.airport_id
    JOIN cities AS c ON a.city_id = c.city_id
                        AND city_name = 'New York'
    JOIN airports AS b ON i.arr_airport_id = b.airport_id
    JOIN cities AS v ON v.city_id = b.city_id
                        AND v.city_name = 'Budapest'
ORDER BY 
    f.price
FETCH FIRST 1 ROW WITH TIES