トップページに戻る    次のmodel句のサンプルへ    前のmodel句のサンプルへ

model句08 having句の次にmodel句が評価される

SQLパズル

Oracle Database 10g のSQL MODEL句の6ページより引用
MODEL句は、最後のORDER BY 以外の、
SELECT文の他の句がすべて処理されてから処理されます。

モデリングのSQLより引用
MODEL句が評価されるのは、SELECT DISTINCT句を除く問合せブロック内のすべての句およびORDER BY句が評価された後です。
SELECTリスト内の句および式は、MODEL句の後に評価されます。 

SQL for Modelingより引用
The MODEL clause is evaluated after all clauses in the query block
except SELECT DISTINCT, and ORDER BY clause are evaluated.
These clauses and expressions in the SELECT list are evaluated after the MODEL clause.

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

having句の次にmodel句が評価されるようです。

select ID as Pkey,val
  from (select 1 as ID from dual union all
        select 1 from dual union all
        select 2 from dual union all
        select 2 from dual union all
        select 2 from dual union all
        select 3 from dual union all
        select 3 from dual)
 where ID in(1,2)
 group by ID
 having count(*)=2
 model
 dimension by (ID)
 measures(0 as Val)
 rules (val[999] = 123)
order by Pkey;

PKEY■Val
----■---
   1■  0
 999■123


解説

ちなみに、
model句を使うと、select句で分析関数を使えなくなります。

select ID as Pkey,val,count(*) over() as cnt
  from (select 1 as ID from dual)
 model
 dimension by (ID)
 measures(0 as val)
 rules (val[1] = 123)
order by Pkey;

行1でエラーが発生しました。
ORA-30483: window  functions are not allowed here