SQL функция для выбора события, происходящего во всех 4 кварталах - PullRequest
0 голосов
/ 03 мая 2020

Я пытаюсь решить проблему, которая включает анализ данных о стоимости авиабилетов с течением времени. Ниже приведена краткая версия таблицы:

Квартал city1 city2
1 Олбани, Нью-Йорк Орландо, Флорида
2 Олбани, Нью-Йорк Орландо, Флорида
3 Олбани, Нью-Йорк Орландо, Флорида
4 Олбани, штат Нью-Йорк, Орландо, штат Флорида
4 Олбани, штат Нью-Йорк, Лос-Анджелес, Калифорния (столичный округ)
4 Олбани, штат Нью-Йорк, штат Вашингтон, D C (столичный округ)
2 Олбани, штат Нью-Йорк, Атланта, Джорджия (Столичная зона)

Вопрос: Как показать только уникальные комбинации city1 и city2, которые произошли во всех 4 кварталах? В этом примере единственная строка, которую я хочу вернуть, - это Олбани, штат Нью-Йорк и Орландо, штат Флорида, поскольку другие варианты повторялись не во всех кругах.

У меня есть следующая команда, чтобы показывать только уникальные комбинации city1 и city2, но я застреваю! Помощь оценена!

    select city1, city2 FROM airfare_data
    UNION
    SELECT city1, city2 from airfare_data
    ORDER BY city1, city2;

Ответы [ 3 ]

0 голосов
/ 03 мая 2020

Вы можете group by city1, city2 и установить условие в предложении having:

select city1, city2
from airfare_data
group by city1, city2
having count(distinct Quarter) = 4;

Если порядок 2 городов не имеет значения, вы можете использовать функции min() и max() вот так:

select min(city1, city2) city1, max(city1, city2) city2 
from airfare_data
group by min(city1, city2), max(city1, city2)
having count(distinct Quarter) = 4;

См. Демоверсию . Результаты:

| city1     | city2      |
| --------- | ---------- |
| Albany NY | Orlando FL |
0 голосов
/ 03 мая 2020

Тестовые данные



Select 1 as Quarter, 'Albany, NY' as city1, 'Orlando, FL' as city2
into #AirData
 Union
Select 2, 'Albany, NY', 'Orlando, FL' Union
Select 3, 'Albany, NY', 'Orlando, FL' Union
Select 4, 'Albany, NY', 'Orlando, FL' Union
Select 4, 'Albany, NY', 'Los Angeles, CA (Metropolitan Area)' Union
Select 4, 'Albany, NY', 'Washington, DC (Metropolitan Area)' Union
Select 2, 'Albany, NY', 'Atlanta, GA (Metropolitan Area)' Union
Select 3, 'Albany, NY', 'Atlanta, GA (Metropolitan Area)' Union
Select 1, 'Albany, NY', 'Atlanta, GA (Metropolitan Area)' Union
Select 4, 'Albany, NY', 'Atlanta, GA (Metropolitan Area)' 

и запрос:


select city1, city2
from #AirData 
group by  city1, city2 
having count(distinct quarter)  = 4

0 голосов
/ 03 мая 2020

Вы можете попробовать сгруппировать по городам и посчитать отдельный квартал от объединения между городами1 и городом2

select city 
from (
select quarter, city1 city
from mytable  
union 
select quarter, city2
from mytable )   
group by  city 
having count(distinct quarter)  = 4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...