-1

正しい結果が得られないクエリがあります。次の表で都市の平均ステータスを取得しようとしています。

    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');
4

1 に答える 1

3

元の質問は、「すべての都市の平均で各都市の最大 (!) ステータスは?」であると推測します。

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

サンプルデータを考えると、結果は26.66666...

于 2013-09-10T18:23:05.427 に答える