Граф в оракуле - PullRequest
       28

Граф в оракуле

1 голос
/ 23 марта 2012

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

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

Ответы [ 3 ]

3 голосов
/ 23 марта 2012

Удалить 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;
3 голосов
/ 23 марта 2012

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

Измените 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 голосов
/ 23 марта 2012

Попробуйте

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...