我写了以下查询来尝试计算去往特定城市的航班数量,但我不能让它运作
SELECT F.FLI_ID, A.AIRPORT_ID, C.CITY_ID
FROM FLIGHT F INNER JOIN (AIRPORT A INNER JOIN CITY C ON A.CITY_ID = C.CITY_ID)
ON F.ARRV_AIRPORT = A.AIRPORT_ID
WHERE C.CITY_ID = 1000
GROUP BY F.FLI_ID, A.AIRPORT_ID, C.CITY_ID;
产量
FLI_ID AIRPORT_ID CITY_ID
---------- ---------- ----------
19 1 1000
11 1 1000
应该收益
NO.FLIGHTS AIRPORT_ID CITY_ID
---------- ---------- ----------
2 1 1000
我尝试了以下查询
SELECT COUNT(F.FLI_ID) AS NO_FLIGHTS, A.AIRPORT_ID, C.CITY_ID
FROM FLIGHT F INNER JOIN (AIRPORT A INNER JOIN CITY C ON A.CITY_ID = C.CITY_ID)
ON F.ARRV_AIRPORT = A.AIRPORT_ID
WHERE C.CITY_ID = 1000
GROUP BY F.FLI_ID, A.AIRPORT_ID, C.CITY_ID;
我得到以下结果
NO_FLIGHTS AIRPORT_ID CITY_ID
1 1 1000
1 1 1000
答案 0 :(得分:3)
你不应该按照你想要计算的相同值进行分组...这就是为什么你最终每行都有一个计数。
更改您的GROUP BY
:
GROUP BY F.FLI_ID, A.AIRPORT_ID, C.CITY_ID;
要:
GROUP BY A.AIRPORT_ID, C.CITY_ID;
它为您提供以下查询:
SELECT COUNT(F.FLI_ID) AS NO_FLIGHTS, A.AIRPORT_ID, C.CITY_ID
FROM FLIGHT F INNER JOIN (AIRPORT A INNER JOIN CITY C ON A.CITY_ID = C.CITY_ID)
ON F.ARRV_AIRPORT = A.AIRPORT_ID
WHERE C.CITY_ID = 1000
GROUP BY A.AIRPORT_ID, C.CITY_ID;
答案 1 :(得分:3)
从FLI_ID
移除GROUP BY
。通过将其保留,您迫使计数汇总每FLI_ID
个航班的数量,这将始终为1,因此您将获得每个航班ID的一行。
SELECT COUNT(F.FLI_ID) AS NO_FLIGHTS, A.AIRPORT_ID, C.CITY_ID
FROM FLIGHT F INNER JOIN (AIRPORT A INNER JOIN CITY C ON A.CITY_ID = C.CITY_ID)
ON F.ARRV_AIRPORT = A.AIRPORT_ID
WHERE C.CITY_ID = 1000
GROUP BY A.AIRPORT_ID, C.CITY_ID;
答案 2 :(得分:0)
尝试
SELECT count(1) as NUM_FLIGHTS, A.AIRPORT_ID, C.CITY_ID
FROM FLIGHT F INNER JOIN (AIRPORT A INNER JOIN CITY C ON A.CITY_ID = C.CITY_ID)
ON F.ARRV_AIRPORT = A.AIRPORT_ID
WHERE C.CITY_ID = 1000
GROUP BY A.AIRPORT_ID, C.CITY_ID;