トップページに戻る    DSP受験記    記事(OTN)    記事(CodeZine)    MSDN C#    @IT C#入門
2006年 4月 5日から2007年 7月28日までのブログ
2007年 8月 1日から2007年10月28日までのブログ
2007年10月20日から2008年 5月 8日までのブログ
2008年 5月22日から2008年 9月 3日までのブログ
2008年 9月 4日から2009年 2月 4日までのブログ
2009年 2月 7日から2009年 5月20日までのブログ
2009年 5月22日から2009年 7月13日までのブログ
2009年 7月15日から2009年11月11日までのブログ
2009年11月14日から2010年 3月13日までのブログ
2010年 3月15日から2010年 7月21日までのブログ
2010年 7月24日から2011年 3月29日までのブログ
2011年 3月30日から2012年 1月11日までのブログ
2012年 1月18日から2014年 3月18日までのブログ
2014年 3月21日から2014年11月15日までのブログ
2014年11月22日から2015年 3月 1日までのブログ
2015年 3月15日から2015年 5月30日までのブログ
2015年 6月 7日から2018年 4月24日までのブログ
2018年 7月21日から2021年 2月19日までのブログ
最新のブログ

●2006年4月5日
PL/SQL Developerを使ってるんですが、
こんなSQLを流すと

select
cast(1 as number(30)) as Col1,
cast(1234567890 as number(30)) as Col2,
cast('a' as varchar2(300)) as Col3,
cast('abcdefghijklmnopqrstuvwxyz' as varchar2(300)) as Col4,
cast('a' as varchar2(300)) as Col5,
cast('a' as varchar2(300)) as Col6
from dual;

自動で列幅を補正してくれることを最近知りました。
テーブルのデータを表示した時も自動で列幅を補正してくれます

PL/SQL Developerには、
SQLの結果をExcelにコピーする機能があったり、
SQLで文法エラーがあったときに、
原因となった場所にカーソルが移動してくれる機能もあったりします


●2006年4月8日
私の好きなパズルゲームで
アディのおくりものというゲームがあります

アルファベットを操作して、別の単語に変更する
ただし、手数制限があるという思考型パズルゲームです

アディのおくりものは、キャッチコピーが

「ログロック」はことばのパズル。
アルファベットを組み替えて
モノのかたちも変えられる!

となっていて、これをSQLパズルに例えると、

「SQLパズル」は集合のパズル。
SQLで集合を組み替えて
集合を変えられる!

さらに正規表現に例えると、

「正規表現」は文字列のパズル。
マッチパターンを指定して
文字列を変えられる!

ですかね


●2006年4月18日
カップラーメンに、お湯を入れてから
三分計るSQLスクリプトを作ってみた

set timi on

declare
    StartTime constant date := sysdate;
begin
    Loop
        exit when StartTime+3/24/60 <= sysdate;
    end Loop;
end;
/

wshかバッチで作ったほうが便利なのができそうですが


●2006年5月16日
某サーバで、Oracleのデータをimpしたのですが
無効オブジェクトが発生することを忘れてました

いつもは、オブジェクトブラウザPL/SQL Developer
でリコンパイルしているのですが、インストールされてない

結局、Enterprise Manager Console
を使ってリコンパイルしました

このSQLを持ってけばよかった

select 'Alter ' || OBJECT_TYPE || ' ' || OBJECT_NAME || ' compile;' as DDL
  from user_objects
 where STATUS = 'INVALID';


●2006年5月19日
OracleSQLパズルは、InfoSeekアナライザーでアクセス解析をしてますが
平日は、平均100ユニークアクセス
休日は、平均20ユニークアクセス
あったりします

しかし、戻る時に、BackSpaceボタンを使う方は、結構少ないんですね
BackSpaceの戻るは、Webサーバーへのアクセスが発生しないため、凄く速いんですが


●2006年5月22日
昔、算盤をやってたんですが
最近は、暗算に興味があります
レシートの足し算とか
RPGで敵に与えたダメージを暗算できるようになりたい


●2006年6月7日
階層問い合わせと、分析関数を組み合わせると
クエリの結果がおかしくなる現象に遭遇してしまった

詳細はこちら


●2006年6月11日
decode関数を使うと
クエリの結果がおかしくなる現象に遭遇してしまった

詳細はこちら


●2006年6月22日
Left Joinを使うと
クエリの結果がおかしくなる現象に遭遇してしまった

詳細はこちら


●2006年6月23日
正規表現で文字クラスを使うと
クエリの結果がおかしくなる現象に遭遇してしまった

詳細はこちら
詳細はこちら
詳細はこちら


●2006年7月25日
最近、正規表現パズルを姉妹サイトとして作ろうか考えてます。
Javaでいろいろな正規表現パズルを作ってみようかな


●2006年7月26日
アクセス解析を見ると、
SQL 移動平均
で検索してくる人が結構多いですね。
分析関数を使う方法
はありますが、相関サブクエリ版も載せるとしましょう


●2006年7月28日
移動平均を求めるSQLの
相関サブクエリ版を作ってみた
8-5 移動平均を求める


●2006年8月3日
姉妹サイトの
正規表現パズルを作ってみた
正規表現の使用環境は、EmEditorを想定してます


●2006年8月14日
dense_rankでナンバリングすると
クエリの結果がおかしくなる現象に遭遇してしまった。

2047年と2048年の比較でおかしくなるってことは、
オーバーフローでも起きてんですかね

詳細はこちら


●2006年9月7日
Oracle SQLクイズを買ってきました
Oracle社員の方が執筆された、
OracleのSQLの本というのは、この本が最初かな?

私は、DBマガジンは、基本的に立ち読みのみなので、
単行本化はありがたいです


●2006年9月26日
駿台文庫から出版されてた秋山仁教授の数学本の、再販希望です
昔、全巻持ってたのですが、捨ててしまいました・・・
伝説的な数学の参考書だと思います。

かなり記憶が薄れているのですが、
特に同値変形の解説が勉強になって、
SQLや正規表現でも応用してますね


●2006年9月27日
マイナーなWindowsツールで
Excel Viewerがあります
Excelと併用してますが、結構便利ですよ


●2006年10月16日
最近知った、
ベン図が同じことを使っての、SQLの相互変換

3-27 full joinとunionの相互変換
数学での集合が等しいことの必要十分条件は、
要素数が等しく、かつ、互いの要素を含むこと
ですが、
ベン図が同じであれば、要素数が等しいので、
あとは要素によっては、同値なSQLに書き換え可能なのですね

数学の集合は重複を許可しないけど、
SQLでは重複を許可するといった問題もありますが


●2006年10月23日
数学のサイトを見てると、
数学は役に立つという主張をよく見かけます

私の考えとして、以下の3通りの人がいて
1 学習した数学を理解できない。
2 学習した数学は理解できる。
3 学習した数学を、数学以外のことに応用可能なぐらい深く理解している。

3に該当する人のみ、数学は役に立つと思いますね

数学に限らず、算数も情報処理技術者試験もそうなんでしょうけどね。
というより、全ての学問にいえるのかな?


●2006年10月31日
ドメインロジックとSQL
私は、SQL派ですね。
表関数を使えば、PL/SQLだって使えますし、
Oracleには、定義が変更されたら、
無効オブジェクトになる便利な機能がありますし


●2006年11月10日
データベースの「生きる道」を探る
こんなサイトを見つけた


●2006年11月27日
数学メモ

条件Aが真ならば条件Bも真である場合は、
条件Aが真、かつ、条件Bが真
であることは、
条件Aが真であることと同値である

X=3ならばY=1である場合は、
X=3、かつ、Y=1
であることは、
X=3であることと同値である


●2006年12月22日
もうすぐ年末年始でして、
Oracleマスターの勉強と、
気分転換に、OracleSQLパズルと正規表現パズルを更新する予定でしたが、
SQLパズル(日本語版)の一版を、手に取ることができたので
じっくり読むとします。
これだけで、年末年始が終わりそうな気もしますが


●2006年12月27日
SQLパズルを読みつつOracleのSQLで解いているのですが、
三問目のパズル(麻酔)で、こんなのに遭遇してしまった。
詳細はこちら

結合で代用するしかなさそうかな


●2006年12月30日
論理学に本格的に興味を持ったのは、
試行錯誤しながらの、この同値変形がきっかけですが


●2007年1月4日
数学的に、完全に正しいかは不明ですが、考察してみた。
命題が成立した状態での、ブール代数の同値変形

そして、論理パズルの本を買ってきた。
史上最強の論理パズル―ポイントを見抜く力を養う60問
論理パズル「出しっこ問題」傑作選―論理思考のトレーニング
ブール代数と命題を組み合わせて解いてみようと思います。

気が向いたら
OracleSQLパズル、MySQLパズル、PostgreSQLパズル、正規表現パズルの
姉妹サイトで、ブール代数パズルをつくろうと思います


●2007年1月7日
移動平均を求めるSQLの結合版に続いて、
移動平均を求めるSQLの逆ソート版を作ってみました

信長の野望 烈風伝で、戦闘や采配でソートして遊んだ経験が
ascとdescを入れ替えた逆ソートを、脳内でイメージする際に、役に立ってます
逆ソート(リバースソート) 


●2007年1月8日
10gR2は暗黙ソートが発生しにくい

ハッシュアルゴリズムを使うと
AVL木を構築したかのような、バラバラなソートになってますね

OracleSQLパズルで出力結果と
SQLの結果のソート順が合わないのを
grepで見つけ出して修正しました

distinctもgrepで調査して修正しました


●2007年1月9日
SQLパズル(日本語版)の一版を読み終わって、
Oracleで分析関数版や別解を作りつつ、OracleSQLパズルに掲載しているのですが
どれをとっても難しいですね。

数学の等差数列を使った
公差が1の等差数列 ⇔ 末項 - 初項 = 項数 - 1
は、SQLパズル(日本語版)の一版にのってたSQLが元です
9-17 最新の連続期間

ブール代数を使うのもあったり
9-18 存在有無のブール値を求める

数学は、難しいから面白い
と言ってた数学のCMみたいなのが、昔ありましたが
今なら賛同できますね


●2007年1月10日
Revenge of the Nerds
なぜ1950年代の言語が時代遅れにならないかという簡単な説明は、
それが技術じゃなくて数学だったということだ。数学は色あせない。
Lispを比較する対象は1950年代のハードウェアでなく、例えばクイックソートのアルゴリズムだ。
それは1960年に発見され、いまだに汎用ソートアルゴリズムとして最速だ。

数学は色あせない。
実にいい言葉です。


●2007年1月11日
集合で考える
Thinking in Aggregates

select文は、

from句
where句
group by句
having句
select句
union、minus、intersectなどの集合演算
order by句
の順に評価されることをふまえた上で、

having句で条件を満たす集合かをチェックする。
と考えると理解しやすいと思います。

さらに、
集合の要素数を1として、数列で考える
集合の要素数を2以上として、ベクトルで考える
といった応用もありそうですね。

最近、数列で考えたのがきっかけで思いつきました
9-17 最新の連続期間

ベクトルで考えるのは・・・
数学のベクトルは、苦手だったので、
青チャートで勉強しようと思います

ちなみに
having句に限らず、分析関数のパーティション分割でも似たような考え方が使えます


●2007年1月15日
気になるクエリ
Group by preserving the order

最近、Last_Value(case when 条件 then 値 end ignore nulls order by ソート条件)
を多用してたら、9iでの別解が思いつきにくくなった
10-130 ignore nullsをsum関数で代用


●2007年1月18日
Left Joinのon句で相関なスカラー副問い合わせを使うと
クエリの結果がおかしくなる現象に遭遇してしまった。

相関なスカラー副問い合わせを
非相関なスカラー副問い合わせに変更して対処しました。
詳細はこちら


●2007年1月23日
ブール代数パズル
なんてサイトを作ってみた。


●2007年1月25日
SQLクックブック
を買ってきました

まだ、さらっと読んだだけですが、
Oracle、SQL Server、DB2、MySQL、PostgreSQL
が扱われていて、とてもいい本だと思います

テーブルがempとdeptしかでてこないのが、実によく考えられてます。
SQLの難易度は、Joe Celko氏の著書[SQLパズル]ほどではない感じです

面白いSQLがあったら、
アレンジしたのをOracleSQLパズルに掲載するとしよう


●2007年1月26日
存在と無 ―― 空集合とNULL
集合(set)

分析関数のpartition byは、数学の集合用語らしい


●2007年1月28日
@IT 今から始める MySQL入門

MySQLのマスコットキャラは、可愛いですよね
イルカとか、
とか、
サードパーティツールのNavicatとか


●2007年2月21日
備忘録というかコピペ用

sqlplus system/manager@test

create user test
identified by test
default tablespace users
temporary tablespace temp;

grant dba to test;
--grant dba to public;

conn scott/tiger@test
grant select ON scott.emp TO test;
grant select ON scott.dept TO test;

conn test/test@test
create or replace view emp as
select * from scott.emp
with read only;

create or replace view dept as
select * from scott.dept
with read only;


●2007年2月27日
惜しくもボツった正規表現

正規表現
,(?=(([^']*'){2})*[^']*$)
(?=((((?![()](?=(([^']*'){2})*[^']*$)).)*[()](?=(([^']*'){2})*[^']*$)){2})*
((?![()](?=(([^']*'){2})*[^']*$)).)*$)

対象データ
1,2,3,4,5,6
empno,to_char(empno,'9999999'),to_char(empno,'9,999,999'),'aaaa,''','(aaa(','bb)bb)'
empno+to_number(empno),'aaaa),,bbb',1+5,1+(5+6),to_number(empno)
substr(to_char(empno,1,5),'hello,world','X''mas',count(*) over()
max(substr(to_char(empno),1,5)),1+5

先読みで、
()
が偶数個かを見るのが間違い
こういった場合に区別できない
((a+b))
a+(b+c)


●2007年3月2日
だいぶ前に、
NHKスペシャル「インドの衝撃:わき上がる頭脳パワー」を見たのですが、
私も衝撃を受けました。

数学や物理といった頭だけで勝負できる分野で勝負するという発想
インターネットの普及により、場所の違いは大して重要ではなく、
頭脳こそが重要である。

現に、IT技術者のスキルが、
ドラゴンボールの戦闘力のごとくインフレしてきてますからねぇ

インドでは、日本の九九が、
19*19まであるそうですが、
私も、覚えてみようかなと思ったり


●2007年3月12日
最近、電車で
英語の数学サイトとか
英語のSQLサイトを印刷したのを読んでます。

Thinking in Aggregates
を読んでいるのですが

一枚を読むのにかかる時間は、
数学なので、脳内での、論理展開とか数式の同値変形が必要で
さらに
英語なので、脳内で、文法とか単語を考える必要があるので、
@ITとかcodezineの講座を印刷したのを読むのの、
数倍は余裕でかかりますね。

しかし、英語の数学の文章を読むのは、本当に面白いです


●2007年3月25日
英語学習計画

えいご漬け
中学総合的研究英語
かんべ やすひろ氏の本
英文法のトリセツ
キクブン
キクタン

目標
1 select * from dictを読む
2 英語のOracleマニュアルを読む
3 Joe Celko氏の英文を読む
4 Jeffrey E. F. Friedl氏の英文を読む
5 Oracleエースのブログを読む
6 英語の数学サイトを読む
7 US-OTNのforumに英文を書き込む
8 OracleSQLパズルの英語版を作る
9 正規表現パズルの英語版を作る

Oracleマスターの勉強をしつつ、やるとする


●2007年4月16日
OracleでPivot

Pivot table
Pivot dynamic data with pipelined function Dynamic SQL Pivoting - Stealing Anton’s Thunder


●2007年5月3日
Duality

Any algebraic equality derived from the axioms of Boolean algebra remains true
when the operators OR and AND are interchanged
and the identity elements 0 and 1 are interchanged.
This property is called the duality principle.
For example,

x + 1 = 1
x * 0 = 0 (dual)
Because of the duality principle, for any given theorem we get it's dual for free.

数学的な内容もさることながら、
英語としても、
・従位接続詞のwhen
・等位接続詞のand
・受動態
・三単現のs
が使われていて、感激してしまった。(私の英語力が低いともいう)
暗記したい英文というのは、こういうのを指すのでしょうかね。

接続詞と節 やり直し基礎英文法

しかし、英語は、中学で挫折したので、原点に返って、この本からやらないとダメだな。
中学総合的研究英語


●2007年5月4日
ブール代数の計算ドリル
いろんなところから集めてみた


●2007年5月5日
v$sql and bind variable
実行されたSQLを見る方法(バインド変数まで分かるようだが未確認)


●2007年5月7日
Anagram Help
再帰呼び出しを使って、
文字列データを元に、文字の組み合わせを列挙する方法のようだ


●2007年5月11日
カルノー図
クワイン・マクラスキー法
勉強してみる。

最近ブール代数に興味津々です。
この本
論理パズル「出しっこ問題」傑作選
を全部解くとするか。

解法は、
ブール代数パズル
に掲載していこう。


●2007年5月15日
10-164 場合の数を求めて、場合分け
場合分けせずとも、
ベクトルの考え方を使って
移動量を元に、不等式を立式すればいいことに気づかなかった。

高校時代にベクトルは、まともに勉強してないので、
青チャートで勉強しないとダメだな


●2007年5月27日
I used RANGE UNBOUNDED FOLLOWING. But syntax error

マニュアルバグを報告したのはいいけど、英語がよく分からない。
現在完了形から勉強する必要がありそうだ。

マニュアルバグの修正は、されたようです。


●2007年6月2日
別解を考える大切さより引用

>とにかく別解を考えるおもしろさに気づき,日頃から一つの解法に満足せず,
>他の解法を考えるようにすれば,数学の力が飛躍する.
>
>問題が解けてもそれに満足せずこの辺りを考えておく.それは必ず他の場面で生きてくる.
>
>1つの問題について,このようないろんな側面から考えたい.違う問題を2題解くより,
>ひとつの問題を 2通りにの方法で解く方が,力がつく.
>なぜならそのことによって,他の関連した問題が一気に解けるようになるからだ.

SQLとか正規表現でも同じことが言えそうだ。
まあ、私は、別解を考えるクセが、元々あったようですが


●2007年6月6日
DB2 SQLパズルを作ってみました。


●2007年6月9日
DB2 SQL Cookbook
英語の勉強も兼ねて読んでみる。


●2007年6月10日
Rows to String: Other Techniques
OTN user Aketi Jyuuzou suggests an XML based solution and a hierarchical solution
at OTN SQL and PL/SQL Forum
how to display empno in a single row instead of displaying it vertically.
The XML solution performs comparably to the one presented in XML - CSV Method.

Rows to String: XML - CSV Method
An alternate solution by OTN user Aketi Jyuuzou is available
at OTN SQL and PL/SQL Forum
how to display empno in a single row instead of displaying it vertically.

こんなの見つけた。
エピソード記憶で、英単語を記憶できるのはありがたい。

エピソード記憶と意味記憶


●2007年6月12日
分析関数の衝撃(前編)
中編を執筆中。 OracleSQLパズルと姉妹サイトは、 私が後で読んで分かる程度の解説しかないですが CodeZineの記事は、読者の学習効率を考慮した解説を書きました。 扱うSQLを、既存のCodeZineの記事の別解としたのは、 このことを意識したのです。(結果論) 別解を考える大切さより引用 >とにかく別解を考えるおもしろさに気づき,日頃から一つの解法に満足せず, >他の解法を考えるようにすれば,数学の力が飛躍する. > >問題が解けてもそれに満足せずこの辺りを考えておく.それは必ず他の場面で生きてくる. > >1つの問題について,このようないろんな側面から考えたい.違う問題を2題解くより, >ひとつの問題を 2通りにの方法で解く方が,力がつく. >なぜならそのことによって,他の関連した問題が一気に解けるようになるからだ.


●2007年6月15日
Multi-Rows from DUAL
クロス集計を使った、行の作成

SELECT Row_Number() over(order by 1) FROM DUAL GROUP BY CUBE(1,2,3,4,5,6,7,8);
SELECT Row_Number() over(order by 1) FROM DUAL GROUP BY Rollup(1,2,3,4,5,6,7,8);


●2007年6月17日
便利なtaskコマンド

c:\>tasklist /fi "IMAGENAME eq exce*"
c:\>taskkill /fi "IMAGENAME eq exce*"


●2007年6月22日
Query: Order by IP
I prefer using lpad than to_number because if some values are invalid,
the to_number will generate an error, but one may prefer to receive an error.

なんか英語の構文が気に入った文。
偶然にも、最近覚えた英文法がぎっしり

・ラテン比較級
・動名詞のusing
・従位接続詞のbecause
・if 文,文
・to不定詞
・助動詞

英文法のトリセツ ― 中学レベル完結編によると
prefer A to B
が一般的ですが、最近は
prefer A than B
を使うイギリス人が増えてるらしいです。


●2007年6月23日
クエリメモ

SQL> select ID,seq,Val,sum(Val) over(order by ID,seq) as SumVal
  2    from (select 10 as ID,1 as seq,100 as Val from dual
  3    union select 10,2,  200 from dual
  4    union select 10,2,  400 from dual
  5    union select 20,1,  800 from dual
  6    union select 20,1, 1600 from dual
  7    union select 20,1, 3200 from dual
  8    union select 20,2, 6400 from dual
  9    union select 20,2,12800 from dual);

ID  SEQ    VAL  SUMVAL
--  ---  -----  ------
10    1    100     100
10    2    200     700
10    2    400     700
20    1    800    6300
20    1   3200    6300
20    1   1600    6300
20    2   6400   25500
20    2  12800   25500


●2007年6月24日
分析関数の衝撃(中編)がほぼ完成しました。後は、見直して入稿するだけなのですが、
今回の添付のソースコードは、OracleとDB2の、SQLを作成しました。

DB2のSQL作るの難しかったですねぇ。
DB2の分析関数のcount関数でdistinctオプションを使うと文法エラーになったのには、
びびってしまいました。

-- これはOK
select *
  from sales;

-- これもOK
select count(distinct sale) as c
  from sales;

-- これもOK
select count(sale) over() as c
  from sales;

-- これは文法エラー
select count(distinct sale) over() as c
  from sales;

-- 逆ソートを使った代替案
select -1+dense_rank() over(order by sale  asc)
         +dense_rank() over(order by sale desc) as c
  from sales;

2-3-26 正順位と逆順位

記事では、私がSQLを考える時の、脳内での補助線などを画像化してみました。


●2007年6月26日
DB2のフォーラムにデビューしました
DB2で、分析関数のcount関数でdistinctオプションが文法エラーになるのは、仕様のようです。

Oracleでも、
分析関数のcount関数でdistinctオプションを使って、さらにorder byも使うと
ORA-30487: ORDER BY not allowed here
が発生するというのもありますけどね。
これの代替案は、
相関サブクエリを使うか、
case式とsumを組み合わせる。

SQL> select SortKey,Val,
  2  count(distinct Val) over() as disticntCount
  3  from (select 1 as SortKey,'AAA' as Val from dual
  4  union select 2,'AAA' from dual
  5  union select 3,'BBB' from dual
  6  union select 4,'CCC' from dual
  7  union select 5,'CCC' from dual
  8  union select 6,'AAA' from dual
  9  union select 7,'AAA' from dual);

SortKey■Val■disticntCount
-------■---■-------------
      1■AAA■            3
      2■AAA■            3
      7■AAA■            3
      6■AAA■            3
      3■BBB■            3
      4■CCC■            3
      5■CCC■            3

SQL> select SortKey,Val,
  2  count(Val) over(order by SortKey) as disticntCount
  3  from (select 1 as SortKey,'AAA' as Val from dual
  4  union select 2,'AAA' from dual
  5  union select 3,'BBB' from dual
  6  union select 4,'CCC' from dual
  7  union select 5,'CCC' from dual
  8  union select 6,'AAA' from dual
  9  union select 7,'AAA' from dual);

SortKey■Val■disticntCount
-------■---■-------------
      1■AAA■            1
      2■AAA■            2
      3■BBB■            3
      4■CCC■            4
      5■CCC■            5
      6■AAA■            6
      7■AAA■            7

SQL> select SortKey,Val,
  2  count(distinct Val) over(order by SortKey) as disticntCount
  3  from (select 1 as SortKey,'AAA' as Val from dual
  4  union select 2,'AAA' from dual
  5  union select 3,'BBB' from dual
  6  union select 4,'CCC' from dual
  7  union select 5,'CCC' from dual
  8  union select 6,'AAA' from dual
  9  union select 7,'AAA' from dual);
count(distinct Val) over(order by SortKey) as disticntCount
                         *
行2でエラーが発生しました。:
ORA-30487: ORDER BY not allowed here

SQL> select SortKey,Val,sum(WillSum) over(order by SortKey) as disticntCount
  2  from (select SortKey,Val,
  3        case Row_Number() over(partition by Val order by SortKey)
  4        when 1 then 1 else 0 end as WillSum
  5          from (select 1 as SortKey,'AAA' as Val from dual
  6          union select 2,'AAA' from dual
  7          union select 3,'BBB' from dual
  8          union select 4,'CCC' from dual
  9          union select 5,'CCC' from dual
 10          union select 6,'AAA' from dual
 11          union select 7,'AAA' from dual));

SortKey■Val■disticntCount
-------■---■-------------
      1■AAA■            1
      2■AAA■            1
      3■BBB■            2
      4■CCC■            3
      5■CCC■            3
      6■AAA■            3
      7■AAA■            3

ちなみに、
sum(distinct Val) over(order by ソートキー)の代替案は、case式で、0か集計したい値に変換する
avg(distinct Val) over(order by ソートキー)の代替案は、case式で、nullか集計したい値に変換する

Medianは集合関数であってもdistinctを使えないようだ。

SQL> select ID,SortKey,Val,
  2  Median(Val) over(partition by ID) as Median
  3  from (select 111 as ID,1 as SortKey,5 as Val from dual
  4  union select 111,2,10 from dual
  5  union select 222,3,15 from dual
  6  union select 222,4,20 from dual
  7  union select 333,5,25 from dual
  8  union select 333,6,30 from dual
  9  union select 333,7,90 from dual);

 ID■SortKey■Val■Median
---■-------■---■------
111■      1■  5■   7.5
111■      2■ 10■   7.5
222■      3■ 15■  17.5
222■      4■ 20■  17.5
333■      5■ 25■    30
333■      6■ 30■    30
333■      7■ 90■    30

SQL> select Median(distinct Val) as Median
  2  from (select 111 as ID,1 as SortKey,5 as Val from dual
  3  union select 111,2,10 from dual
  4  union select 222,3,15 from dual
  5  union select 222,4,20 from dual
  6  union select 333,5,25 from dual
  7  union select 333,6,30 from dual
  8  union select 333,7,90 from dual);
select Median(distinct Val) as Median
       *
行1でエラーが発生しました。:
ORA-30482: DISTINCT option not allowed for this function


●2007年6月30日
英語の勉強に、
英語の音声付きなのがありがたい

The Engines of Our Ingenuity
CANTOR(集合論のカントール)
NEWTON AND THE APPLE(ニュートンの万有引力の法則)
ALICIA BOOLE STOTT(ブールの娘)
NEWTON vs. LEIBNIZ(ニュートン VS ライプニッツ)
GEORG CANTOR(集合論のカントール)
GAUSS'S ALGORITHM(ガウスのエピソード)


●2007年7月7日
4-14 レコードを一意に特定する列の組み合わせ
ビット演算を使ってみたクエリ


●2007年7月9日
US-OTNの正規表現を使ったスレ
REGEXP question


●2007年7月18日
OTN Japan
having句にこだわったupdate文


●2007年7月25日
明智重蔵のブログ(英語関連)
アルクが好きなので、アルクでブログを開設してみた。

ブログは、htmlで書くほうが楽ですねぇ、
どうせ、コメントもトラバも禁止にしますし


OracleMaster   TOEIC   執筆記事   オライリー   翔泳社SHOP   正規表現   ブール代数   DB2   PostgreSQL   C#