2012-03-23 172 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