2012-03-23 95 views
1

我写了下面的查询尝试数着去一个特定城市的航班数量,但我不能让它工作伯爵在Oracle

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 
+1

您的'SELECT'列表中没有COUNT(),并且从'SELECT','GROUP BY'中删除了'F.FLI_ID'。 – 2012-03-23 17:25:39

回答

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; 
+0

感谢您的解释,我不知道我不得不摆脱组 – 2012-03-23 17:30:09

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; 
3

GROUP BY中删除FLI_ID。通过将其放入,您需要强制统计总计每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; 
+0

计数的关键,谢谢,它的工作。 – 2012-03-23 17:30:29