2012-03-23 2 views
1

Я написал следующий запрос, чтобы попытаться подсчитать количество рейсов, которые идут в определенном городе, но я не могу заставить его работатьКоличество в оракула

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

У вас нет 'COUNT()' в вашем списке 'SELECT' и удалите' F.FLI_ID' из 'SELECT',' GROUP BY'. –

ответ

3

Вы не должны группировать по той же стоимости, что вам «пытаюсь подсчитать ... вот почему вы заканчиваете счет по одному для каждой строки.

Измените ваш GROUP BY от:

GROUP BY F.FLI_ID, A.AIRPORT_ID, C.CITY_ID; 

To:

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

Спасибо за объяснение, я не знал, что мне пришлось избавиться от ключа, который подсчитывается в группе –

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

Удалить FLI_ID от GROUP BY. Оставляя его, вы заставляете подсчет суммировать количество полетов на FLI_ID, которое всегда будет 1, поэтому вы получите строку для каждого идентификатора рейса.

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

Спасибо, это сработало. –