Как выбрать несколько строк из таблицы, но средние значения из столбца ВСЕ в T- SQL? - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть база данных о задержках авиакомпаний, и мне нужно усреднить задержки всех их рейсов по воздушной линии, но затем отобразить только воздушные линии, которые летят из города X.

Я попробовал этот код:

SELECT  
    B.airline_name,
    AVG(A.arrival_delay) avg_delay
FROM    
    TableDelays A
JOIN    
    TableAirlines B ON A.airline_id = B.airline_id
WHERE 
    A.city = 'X'
GROUP BY 
    B.airline_name

Но когда я использую линию WHERE Origin = 'X', я получаю неправильную среднюю задержку только рейсов, которые вылетают из города X. Тогда как, когда я не использую линию WHERE, у меня все воздушные линии с правильной отображаются средние значения (из всех их рейсов), но мне нужно отображать только те из города X.

Кто-нибудь знает, как "извлечь" только воздушные линии, вылетающие из города X, чтобы я не брал это во внимание при усреднении значений?

Ответы [ 2 ]

0 голосов
/ 21 апреля 2020

Возможно, CTE поможет достичь этого?

WITH CTE AS(
    SELECT TA.airline_name,
           AVG(TD.arrival_delay) AS avg_delay,
           MAX(CASE WHEN TD.City = 'X' THEN 1 END) AS XCity
    FROM dbo.TableDelays TD --"A" is a poor choice for an alias here
         JOIN dbo.TableAirlines TA ON TD.airline_id = TA.airline_id --"B" doesn't even appear in "Airlines", why use it?
    GROUP BY TA.airline_name)
SELECT airline_name,
       avg_delay
FROM CTE
WHERE XCity = 1;

Как я отмечаю в моих комментариях A и B - плохой выбор для псевдонима таблицы. Используйте подходящие при указании псевдонимов таблиц. Вредные привычки: использовать псевдонимы таблиц, такие как (a, b, c) или (t1, t2, t3)

0 голосов
/ 21 апреля 2020

Используйте предложение HAVING:

SELECT ta.airline_name,
       AVG(td.arrival_delay) as avg_delay
FROM TableDelays td JOIN
     TableAirlines ta
     ON td.airline_id = ta.airline_id
GROUP BY ta.airline_name
HAVING SUM(CASE WHEN td.city = 'X' THEN 1 ELSE 0 END) > 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...