-1

次のクエリがあります

select wbod.subject, wbi.object, 
       age(dod.object,wbod.object) as ageOfPerson 
from wasbornin as wbi, 
     wasbornondate as wbod, 
     diedondate as dod 
where wbi.subject=wbod.subject 
  and wbod.subject=dod.subject  
  and age(dod.object,wbod.object) = (select max(age(dod1.object,wbod1.object)) 
                                     from wasbornin as wbi1, 
                                     wasbornondate as wbod1, 
                                     diedondate as dod1 
                                     where wbi1.subject = wbod1.subject 
                                     and wbod1.subject=dod1.subject 
                                     group by wbi1.object)   
group by wbi.object 
ORDER BY wbi.subject;

しかし、次のエラーが発生しています

column "wbod.subject" must appear in the GROUP BY clause or be used in an aggregate function
LINE 1: select wbod.subject, wbi.object

このエラーが発生する理由

4

2 に答える 2

2

これは、この列を選択しているためです。また、特定のグループ (GROUP BY wbi.object) に 150 の異なるサブジェクトがある場合、そのうちのどれを返す必要がありますか?

最初にクエリを読み間違えました - 注文は wbi.subject を使用していますが、エラーは wbod.subject に関するものです。

于 2013-02-12T15:39:35.290 に答える
1

あなたのクエリを正しく理解していれば、実際にはサブクエリやグループ化は必要ありません:

select subject,
       object,
       ageOfPerson
from (
    select wbod.subject, 
           wbi.object, 
           age(dod.object, wbod.object) as ageOfPerson,
           dense_rank() over (partition by dod.subject order by age(dod.object, wbod.object) desc) as rnk
    from wasbornin as wbi
      join wasbornondate as wbod on wbi.subject=wbod.subject 
      join diedondate as dod on wbod.subject=dod.subject  
) t
where rnk = 1;
于 2013-02-12T15:45:59.317 に答える