CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。
![SQLで基本のデータ解析に挑戦する](https://cdn-ak-scissors.b.st-hatena.com/image/square/5720b3dd3d2a72774b9bf4c5f7fc054ff8231cd3/height=288;version=1;width=512/https%3A%2F%2Fcodezine.jp%2Fstatic%2Fimages%2Farticle%2F10154%2F10154_th.png)
NTT オープンソースソフトウェアセンタ 板垣 貴裕 共通表式 WITH 句と再帰SQL (WITH RECURSIVE) は PostgreSQL 8.4 の新機能です。WITH と WITH RECURSIVE それぞれの説明と、実際の利用例として再帰クエリを使ったロック競合解析の方法を解説します。 共通表式 WITH 句 あるクエリの中で他のクエリの結果を使う方法には、既にサブクエリがあります。WITH 句は、サブクエリの結果に名前をつけ、クエリの複数の箇所からその結果を参照するための構文です。そのクエリの中だけで使用できる一時表 (TEMP TABLE) を作るのに近い動作になります。 利用例としては、あるサブクエリの結果を複数の列と比較する場合が挙げられます。例えば以下のように、表 keyword_list から取得した結果を、表 document の keyword1, key
グループ毎の件数 select 社員マスタ.* ,count(*) over( partition by 課コード) as 課人数 from 社員マスタ 課コード毎の人数も出力する グループ毎の最大値 select 社員マスタ.* ,max(年齢) over( partition by 課コード) as 課高齢 from 社員マスタ 課コード毎の最高年齢も出力する グループ毎の合計数 select 社員マスタ.* ,sum(基本給) over( partition by 課コード) as 課基本給 from 社員マスタ 課コード毎の基本給合計も出力する グループ毎のランク select 社員マスタ.* ,rank() over( partition by 課コード order by 基本給 desc) as 課基本給ランク from 社員マスタ 課コード毎の基本給高額順位も出力する 基本給
また、CREATE FUNCTION 文でユーザ定義のWindow関数を追加することもできますが、バージョン 8.4 ではC言語で関数を記述する必要があります。SQLやPL/pgSQLは使えないので、敷居は高いかもしれません。 例 典型的なWindow関数の使い方を挙げます。この他にも、これまで複雑なSQLが必要だったさまざまなケースを効率化できる可能性がありますので、SQLパズルだと思って試してみてください。。 連番付与 連番付与を行います。ソートした後、番号をふるのがポイントです。 SELECT row_number() OVER (), * FROM (SELECT * FROM tbl ORDER BY sortkey) AS t; ただし、結果の最大行数を指定するには、row_number との値の比較ではなく、これまでどおり LIMIT 句を使ってください。row_number
2つのテーブルから条件に一致しない行のみ抜き出しCSV か他のテーブルに抜き出す処理を作ろうと思っています。 そこで質問なのですが、以下の2つのテーブルから 条件に一致しないコードのみ抜き出すSQL文などありますか? ----------------------------------------- マスターテーブル コード、ネーム1、ネーム2、店コード 1、あ、い、6 2、う、え、8 3、お、か、4 4、き、く、2 店コードテーブル 店コード、店区分 1、スーパー 2、コンビニ 3、デパート 4、ホームセンター ------------------------------------------ 条件は、マスターテーブルの店コードが店コードテーブルに存在 しないデータのみ抽出です。 抽出結果は、以下の様にしたいです。 1、あ、い、6 2、う、え、8 このような考え大丈夫でしょうか? SE
SQL ServerではYEAR関数を使って日付値から年を取得することができます。YEAR関数の他にDATEPART関数で日付値から年を取得することができます。DATEPART関数は年だけではなく、月や日も取得することができますが、YEAR関数は年のみ取得可能です。 文法: YEAR(value) valueで指定した日付値から年を数値として取得する。 使用例:誕生日から年を数値として取得する。 SELECT birthday, YEAR(birthday) FROM tbEmpTable; birthday YEAR(birthday) —————————————————————————– 1978-09-26 00:00:00 1987 1983-04-01 00:00:00 1983 SQLコマンド辞典に戻る
ふと、Postgresqlで曜日や週の集計ができんのかなーと思って、検索してみたところ、あった。過去にも何度も思ったことがあるはずだが)、探し方が悪かったのだろう。postgresql7.2のころから、extract関数というのがあって日付から世紀 century や日 day や十年 decade やら曜日 dow がとりだせる。「extract 関数は日付/時刻の値から年とか時刻などの部分フィールドを抽出します」だそうですよ!(がーん! 知らなかった。。。)詳細は「日付 関数 演算子」などで、postgresqlのドキュメントで探してください。バージョンにはご注意。。 曜日をとりだす例。 select extract(dow from timestamp '2001-02-16 20:38:40');この場合、 '2001-02-16 20:38:40'をtimestampにして、そこ
Tutorials: Learn SQL step by step 0 SELECT basics Some simple queries to get you started 1 SELECT name Some pattern matching queries 2 SELECT from World In which we query the World country profile table. 3 SELECT from Nobel Additional practice of the basic features using a table of Nobel Prize winners. 4 SELECT within SELECT In which we form queries using other queries. 5 SUM and COUNT In which we
SQLアタマアカデミー 第9回SQLでループ! 相関サブクエリの使い方~切れ過ぎるナイフにご用心~ (4)便利で危険な相関サブクエリ② 便利で危険な相関サブクエリ② スカラサブクエリと組み合わせる 相関サブクエリの便利な応用方法として、スカラサブクエリと組み合わせる方法もよく知られています。たとえば、社員テーブル(リスト1)のEmployeesから社員を一覧表示するとき、ついでに部署別(あるいは性別)の最高年齢の情報も追加したい、という場合を考えます。 本来、名前など社員個人に付属する属性と、最高年齢という社員の集合(「部署」とか「性別」)に付属する属性を同じレベルで表示するのは少し奇妙なのですが、現実の要件としてときどき見かけます。こういうケースでは、最高年齢の情報をスカラサブクエリを使って取得することで対応できます(リスト6、図11)。 リスト6 社員の一覧表示に部署の最高
サブクエリの基本的な使い方 サブクエリは、SELECT、INSERT、UPDATE、DELETEといった各ステートメントに含まれたSELECT句です。WHERE句やHAVING句の中、別のサブクエリの中など、様々な場所で利用できます。クエリに含まれるクエリなので、サブクエリと呼びます。 次に例を示します。 SELECT フィールド名 FROM テーブル名 WHERE フィールド名 演算子 ( SELECT フィールド名 FROM テーブル名2 ...); WHERE句の「( SELECT 列名 FROM テーブル名2 ... )」という箇所がサブクエリで、サブクエリは、それ自身を括弧で囲む必要があります。ここでのサブクエリは、外側にあるSELECT句にネストされています。 等号や不等号といった演算子を使用するサブクエリは、返す値は1フィールドまでです。それ以上のフィールドを返す場合や、何も
psql を使用して PostgreSQL へ接続を行ったり、 PostgreSQL から切断することができます。ここでは psql を使って PostgreSQL へ接続する方法および PostgreSQL から切断する方法について解説します。 PostgreSQLへ接続する psql はコマンドラインベースで PostgreSQL で作成済みのデータベースに接続したりテーブルからデータを取得したりすることが出来るツールです。 Windows環境から psql を利用するにはコマンドプロンプトから行います。 最初にコマンドプロンプトを起動してください。(コマンドプロンプトの起動方法については「コマンドプロンプトを起動する」を参照されてください)。 psql を使って PostgreSQL へ接続するには次のように実行します。(実際には PostgreSQL で作成済みの指定したータベース
今回はデータベースの正規化について取り上げます。 PostgreSQL固有ではなく、RDBMS全般に関わる一般的なテーマですが、データベースを扱う上で重要な下地となる部分ですので、ぜひ基礎固めとしてご利用ください。「正規化」はOSS-DB Exam Silverの出題範囲にも含まれていますので、受験を考えている方も気を抜かずに取り組みましょう。 正規化とは データの重複をなくし整合的にデータを取り扱えるようにデータベースを設計することを、データベースの正規化と呼びます。正規化を行っておくと、データの追加・更新・削除などに伴うデータの不整合や喪失が起きるのを防ぎ、メンテナンスの効率を高めることができます。 正規化の段階には、第1~第5正規形およびボイスコッド正規形がありますが、ここでは、データベースを設計する際に一般的に用いられる第1~第3正規形までを、前回登場したテーブルをもとにして説明し
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く