SELECTのTOP N分析(Oracle)

ITコーディネータのシュウです。

公園_4

サッカーワールドカップは、日本は十分力を出し切れず、一次予選敗退。本当に残念でした。最後のコロンビア戦は結構頑張っていたし、前半最後に追いついて、これはやってくれるんじゃないかと思ったのですが、カウンターを見事に決められ、終わってみれば完敗でした。アジアのチームはどこも1勝もできず、世界の壁はやはり厚いです。

また、忙しかったお客様の開発案件も、いよいよ運用開始が近くなってきました。まだ気が抜けません。

<本日の題材>
SELECTのTOP N分析について

前回、Microsoft SQL ServerのSELECTでのTOP句について見ましたが、今回はこれと同様のことをOracleで行う場合について考えてみます。Oracleの場合には、ROW_NUMBER関数を使うと同様なことが可能です。

例)今日の受注テーブルから受注番号順に先頭5件を抽出する。 SELECT * FROM
(SELECT ROW_NUMBER() OVER(ORDER BY 受注NO) JNO, 受注NO, 受注日, 顧客番号, 決済金額 FROM 受注テーブル)
WHERE JNO <=5 ORDER BY JNO;

Oracle_row_number1

また、ROW_NUMBER関数を使用せずに、インラインビューを使用した問い合わせでも可能です。

SELECT * FROM (
SELECT * FROM 受注テーブル
ORDER BY 受注NO
)
WHERE ROWNUM <= 5
ORDER BY 受注NO;

Oracle_インラインビュー1

顧客番号順に並べた最初の5件ということにしたい場合には、以下のようになります。

SELECT * FROM (
SELECT * FROM 受注テーブル
ORDER BY 顧客番号
)
WHERE ROWNUM <= 5
ORDER BY 顧客番号;

Oracle_インラインビュー2

OracleにはTOP句はないですが、上記のような方法で同様のことができますね。
※ちなみに、SQL ServerでもROW_NUMBER関数は使えます。

今日は以上まで

にほんブログ村 IT技術ブログへ
にほんブログ村

SELECT TOP句について

ITコーディネータのシュウです。

1402143571315

いよいよサッカーワールドカップが始まりました。
今回は、逆転勝ちの試合も結構多いようですね。スペインがオランダに5対1で敗れた衝撃的な試合もありました。日本も初戦のコートジボアール戦は逆転負けしてしまいましたが、2戦目のギリシャ戦は、是非勝利を飾ってほしいものです。


<本日の題材>
SELECTのTOP句について

Microsoft SQL Serverの場合には、SELECTでのクエリの結果の行数を指定した行数、または割合(何パーセントか)に制限するTOP句という便利なものがあります。

今回はこれについて見てみたいと思います。

例)今日の受注テーブルから先頭5件を抽出する。
SELECT TOP 5 * FROM 受注テーブル
WHERE 受注日 = CONVERT(CHAR(8) , GETDATE(), 112);

sqlserver_9回目_1

例)先頭の5%を抽出するという場合は以下:
SELECT TOP 5 percent * FROM 受注テーブル
WHERE 受注日 = CONVERT(CHAR(8) , GETDATE(), 112);

これを、さらに、顧客番号順に並べた最初の5件を表示したいという場合には、以下のようになります。

SELECT TOP 5 * FROM 受注テーブル
WHERE 受注日 = CONVERT(CHAR(8) , GETDATE(), 112)
ORDER BY 顧客番号;

sqlserver_9回目_2

結構便利に使えます。
次回は、これをOracleで表現する場合を題材にする予定です。

今日は以上まで

にほんブログ村 IT技術ブログへ
にほんブログ村

よもやまばなし

ITコーディネータのシュウです。

IMG_0839

娘が高校の遠足でディズニーランドに行ってきました。
同じ日に複数の学校から遠足で学生が来て、人も多かったみたいですが、楽しかったようです。

5月は、開発案件の関係で忙しく、緊張した日々が続きました。まだ一部残っている部分がありますが、最後まで気を抜かず、お客様に喜んでもらえるよう頑張らねば!

開発で使用しているツールはdbSheetといい、ExcelやAccessを使いながらWebシステムを構築できるツールです。なかなかおもしろいですよ。
http://www.newcom07.jp/dbsheetclient/index.html

it-coordinator①-1

今日は、少し話題を変えて我が家の様子などを紹介してみたいと思います。

仕事が遅くなって家に帰ると、妻がご飯を用意して待ってくれています。疲れて寝てるときもあったり、ときに遅くまで出かけてる時もありますが。。。

妻は、話をし始めたら止まらなくなるとてもおしゃべりタイプで、いろいろとその日の出来事などをおもしろおかしく教えてくれます。仕事のことでいっぱいだった頭も、いろいろな妻の話で気分転換されることが多く、内心はとても助かっています。

仕事で心配なことでもときに話してみると、結構冷静に、また前向きに元気づけてくれます。私よりも多分に気が強く、男勝りな部分もあるので、結構力強く背中を押してくれるので、ありがたい。ただ、機嫌が悪くなるとなかなか手が付けられなくなる部分もあるのが困りものですが。(ハイ~~)

また、子供たちも上は専門学校生、下は小学3年生と、なかなか幅が広く人数も多いのですが、それぞれに性格が違って、なかなかおもしろいです。
何も言わなくても一生懸命に勉強を頑張って、成績表をうれしそうに見せてくれる子もいれば、勉強はきらいだと、なかなかやる気が出ないけれど、遊ぶことについてはいろいろと知恵を使って新しい遊びを考えたりする子とか。。。

皆をまっすぐに育てるのが親の責任なんでしょうが、なかなか大変ですね。

ITコーディネータの資格の更新も6月末まで(毎年5月末までだったのが、今年は事情があって6月末まで)なので、遅れないように更新手続きもしないと!

ながながと痴話話につきあって頂き、ありがとうございました。
今日は以上まで

にほんブログ村 IT技術ブログへ
にほんブログ村

SQL 比較関数(Greatest、Least)について

ITコーディネータのシュウです。 公園_4

お久しぶりです。

<本日の題材>
比較関数について

データベースの違いによって、あるDBでは使用できる関数が、別のDBでは使用できないケースがあります。その一例として、複数項目の最大値・最小値を取得するSQLを、今回は見てみたいと思います。

データベースがOracleの場合には、GREATEST関数・LEAST関数というのがあります。

例)金額に関する3つの項目の中から最大値を求める。具体的には

item_no | priceA | priceB | priceC |
-----------------------------------------------------
item01  |  6000 |  2000 |  3000
item02  |  1000 |  7500 |  4000
item03  |  1500 |  3000 |  8000

というテーブルがあった場合に、以下のような結果を出したいとします。

item_no | 最大値 | 最小値
------------------------------------------
item01  |  6000 |  2000
item02  |  7500 |  1000
item03  |  8000 |  1500

SQL> SELECT item_no
, GREATEST( priceA, priceB, priceC ) AS 最大値
, LEAST( priceA, priceB, priceC ) AS 最小値
FROM テーブル名;

greatest_ora

これは、MySQLでも同様の関数があります。
 GREATEST()、LEAST()

上記をSQL Serverで行おうとすると、同様の関数がないため、下記のようなSQLを実行するかたちになります。

SELECT  item_no, MAX(price1) AS 最大値, MIN(price2) AS 最小値 FROM
(           SELECT item_no, priceA AS price1, priceA AS price2 FROM テーブル名
UNION ALL SELECT item_no, priceB AS price1, priceB AS price2 FROM テーブル名
UNION ALL SELECT item_no, priceC AS price1, priceC AS price2 FROM テーブル名
) AS TBL
GROUP BY item_no
ORDER BY item_no;

sqlserver_greatest

今日は以上まで

にほんブログ村 IT技術ブログへ
にほんブログ村