найти максимум в самостоятельном соединении после нескольких объединений - PullRequest
0 голосов
/ 30 мая 2019

Я пытаюсь найти наибольшее количество интервью из каждой категории (месяц и город), объединяя две разные таблицы и выполняя самостоятельное объединение в sql

`select distinct table1.event_id, table1.month, table1.city

from

(SELECT event_id, count(*) as total_interviews, month, city
FROM company, events
where company.interviewee_id = events.interviewee_id
GROUP BY event_id, month, city) as table1,

(SELECT event_id, count(*) as total_interviews, month, city
FROM company, events
where company.interviewee_id = events.interviewee_id
GROUP BY event_id, month, city) as table2 

WHERE table1.event_id <> table2.event_id
AND table1.month = table2.month
AND table1.city = table2.city`

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

AND table1.total_interviews > all (select table2.total_interviews FROM table2 WHERE table2.event_id <> table1.event_id) 

, чтобы найти максимальное значение, я получаю сообщение об ошибке, говоря, что для table1 нет такого столбца иТаблица 2.

причина, по которой я добавил это, состоит в том, чтобы я мог определить, какой event_id имеет наибольшее количество интервью по сравнению с остальными, но я не смог выяснить, как это сделать

sample data

Ответы [ 2 ]

0 голосов
/ 30 мая 2019

Вы можете просто использовать ниже запрос.

SELECT * FROM (
    SELECT EventID,total_interviews, Month, City, row_number() over(partition by event_ID,month, City order by total_interviews DESC) as RN
    FROM (
       SELECT Company.event_id, count(*) as total_interviews, Events.month, Events.city, 
       FROM company, events
       where company.interviewee_id = events.interviewee_id
       GROUP BY Company.event_id, Events.month, Events.city 
       ) A
    ) B where RN = 1
0 голосов
/ 30 мая 2019

Попытка вернуться к тому, что, как я думаю, - это исходные данные, до вашего первоначального присоединения к себе, дает ли это вам то, что вы хотите? Это на сервере sql.

declare @i table(id int, n int, m varchar(30), city varchar(2))
insert @i values (1,4,'Jan','SF')
,(2,5,'Feb','NY')
,(3,6,'Mar','LA')
,(4,3,'Jan','SF')
,(5,2,'Feb','NY')
,(6,1,'Mar','LA')

;with cte as (
    select *, row_number() over(partition by m,city order by n desc) roworder 
    from @i
)
select id,m,city from cte 
where roworder=1 
order by id

Результат таков:

id  m   city
1   Jan SF
2   Feb NY
3   Mar LA
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...