2013-09-10 3 views
-1

У меня есть запрос, который не дает мне правильных результатов. Я пытаюсь получить средний статус города в следующей таблице:проблема с avg SQL-запрос

SNO   SNAME     STATUS  CITY 
    s1   Smith     20   London   
    s2   Jones     10   Paris   
    s3   Blake     30   Paris   
    s4   Clark     20   London   
    s5   Adams     30   Athens 

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

select avg(rs1.status) as average 
from rs rs1, rs rs2 
where rs1.city=rs2.city; 

И результаты я получаю:

 AVERAGE 
--------------- 
    21.11111111 

Что я забыть ??? Или мне не нужно самостоятельно присоединяться?

КОД СОЗДАТЬ ТАБЛИЦУ:

create table rs 
(sno char(5) not null, 
    sname char(20) not null, 
    status smallint, 
    city char(15), 
    primary key (sno) 
); 

insert into rs (sno, sname, status,city) 
values('s1', 'Smith', 20, 'London'); 
insert into rs 
values('s2', 'Jones', 10, 'Paris'); 
insert into rs 
values('s3', 'Blake', 30, 'Paris'); 
insert into rs 
values('s4', 'Clark', 20, 'London'); 
insert into rs 
values('s5', 'Adams', 30, 'Athens'); 
+2

Зачем вам самому присоединиться? –

+0

Честно говоря, я думал, что это будет единственный способ сравнить города, а затем показать статус avg на основе города. Это не так просто, как выбор avg (status) из запроса rs, есть еще кое-что, я просто не могу понять, что ... – Bryan

+2

Я не уверен, как вы получаете 26.6667. Не могли бы вы немного объяснить? – Jerry

ответ

3

Гадать, что первоначальный вопрос: «что максимальный статус каждого города в среднем по всем городам (!)?»:

SELECT AVG(m.mstatus) 
FROM (SELECT MAX(status) AS mstatus 
     FROM rs 
     GROUP BY city) AS m 

Учитывая ваши данные примера, результат 26.66666...

+0

Да, это, вероятно, правильный способ формулировки вопроса. Это то, что я искал, большое спасибо! – Bryan

+2

Путь к Иди детектив! Ответит на неизвестный вопрос. –

Смежные вопросы