SlideShare une entreprise Scribd logo
1  sur  10
generate_series関数使い込み 
PostgreSQLアンカンファレンス@東京(9/6) 河原翔 
1
generate_series関数とは 
• 集合を返す関数 
2 
SELECT * FROM generate_series(2,4); 
generate_series 
----------------- 
2 
3 
4 
SELECT * FROM generate_series('2008-03-01 00:00'::timestamp, 
'2008-03-04 12:00', '10 hours'); 
generate_series 
--------------------- 
2008-03-01 00:00:00 
2008-03-01 10:00:00 
2008-03-01 20:00:00 
2008-03-02 06:00:00 
:
一般的?な用途 
• 試験用データの作成 
• 存在しない値を集計結果に表示する 
• 行列変換 
3 
PostgreSQLでテストデータを作成する— Let's Postgres 
http://lets.postgresql.jp/documents/technical/gen_data/1 
Postgres generate_series関数によるデータの生成| Fusic Developers Weblog 
http://blog.fusic.co.jp/archives/810 
列を行に変換する- PostgreSQL 雑記- postgresqlグループ 
http://postgresql.g.hatena.ne.jp/pgsql/20110414 
行を列に変換する- PostgreSQL 雑記- postgresqlグループ 
http://postgresql.g.hatena.ne.jp/pgsql/20110416
前方最長完全一致検索 
• 条件 
・検索文字列「ABCDE」を対象列から検索する 
・前方から最も完全一致している文字数が多い行を取得する 
・ただし、検索文字列に含まれていない文字が含まれる行は 
つまり・・・ 
4 
取得対象外とする 
A ← 一致 
BC ← 不一致(Aから始まっていない) 
ABC ← 一致 
ABCD ← 一致(最長) 
ABCDEF← 不一致 
(Fが検索文字列に含まれていないため不一致)
前方最長完全一致検索 
• クエリ例 
5 
SELECT * FROM test; 
col1 
-------- 
A 
BC 
ABC 
ABCD 
ABCDEF 
SELECT * FROM test WHERE col1 IN 
(SELECT left('ABCDE',generate_series(1,length('ABCDE')))) 
ORDER BY length(col1) DESC LIMIT 1; 
col1 
------ 
ABCD 
left 
------- 
A 
AB 
ABC 
ABCD 
ABCDE 
最長の完全一致を取得
文字列のソート 
• order byでの列ソートではなく文字列毎のソート 
• つまり 
「PQODJHAZBDVACWKABOWPX」を 
「AAABBCDDHJKOOPPQVWWXZ」とする 
6
文字列のソート 
• 途中クエリ1 
7 
SELECT col1 FROM 
(SELECT generate_series(1,3) col1) foo; 
col1 
------ 
1 
2 
3 
配列を文字列に変換複数行を配列に変換 
SELECT array_to_string(array_agg(col1),'') FROM 
(SELECT generate_series(1,3) col1) foo; 
array_to_string 
----------------- 
123 
複数行を集約できる
文字列のソート 
• 途中クエリ2 
8 
SELECT * FROM test; 
col1 
------ 
SQL 
DATA 
SELECT col1,substr(col1,generate_series(1,length(col1)),1) sub 
FROM test ORDER BY col1,sub; 
col1 | sub 
------+----- 
DATA | A 
DATA | A 
DATA | D 
DATA | T 
SQL | L 
SQL | Q 
SQL | S 
1文字ずつ分解してsort
文字列のソート 
• クエリ例 
9 
SELECT * FROM test; 
col1 
----------------------- 
PQODJHAZBDVACWKABOWPX 
UDFPGIEHAPTNVUDIIEHAO 
SELECT col1,array_to_string(array_agg(sub),'') sorted FROM 
(SELECT col1,substr(col1, generate_series(1,length(col1)),1) sub 
FROM test ORDER BY col1,sub) foo GROUP BY col1; 
col1 | sorted 
-----------------------+----------------------- 
PQODJHAZBDVACWKABOWPX | AAABBCDDHJKOOPPQVWWXZ 
UDFPGIEHAPTNVUDIIEHAO | AADDEEFGHHIIINOPPTUUV
欠番探し 
• クエリ例 
10 
SELECT id FROM test; 
id 
--------- 
ID00005 
ID00006 
ID00008 
ID00009 
ID00010 
SELECT id FROM (SELECT 'ID' || lpad(generate_series(1,10)::text,5,'0') id) 
foo WHERE id NOT IN (SELECT id FROM test); 
id 
--------- 
ID00001 
ID00002 
ID00003 
ID00004 
ID00007 
id 
--------- 
ID00001 
ID00002 
ID00003 
ID00004 
ID00005 
ID00006 
ID00007 
ID00008 
ID00009 
ID00010 
文字列連結、lpad、 
castを併用

Contenu connexe

Tendances

for関数を使った繰り返し処理によるヒストグラムの一括出力
for関数を使った繰り返し処理によるヒストグラムの一括出力for関数を使った繰り返し処理によるヒストグラムの一括出力
for関数を使った繰り返し処理によるヒストグラムの一括出力imuyaoti
 
状態空間モデルの実行方法と実行環境の比較
状態空間モデルの実行方法と実行環境の比較状態空間モデルの実行方法と実行環境の比較
状態空間モデルの実行方法と実行環境の比較Hiroki Itô
 
PostgreSQL SQLチューニング入門 実践編(pgcon14j)
PostgreSQL SQLチューニング入門 実践編(pgcon14j)PostgreSQL SQLチューニング入門 実践編(pgcon14j)
PostgreSQL SQLチューニング入門 実践編(pgcon14j)Satoshi Yamada
 
200319 eash python_shareslide_functions
200319 eash python_shareslide_functions200319 eash python_shareslide_functions
200319 eash python_shareslide_functionsHiroki Katayama
 
Deque with Haskel
Deque with HaskelDeque with Haskel
Deque with HaskelKen Ogura
 
Python で munin plugin を書いてみる
Python で munin plugin を書いてみるPython で munin plugin を書いてみる
Python で munin plugin を書いてみるftnk
 
巨大な表を高速に扱うData.table について
巨大な表を高速に扱うData.table について巨大な表を高速に扱うData.table について
巨大な表を高速に扱うData.table についてHaruka Ozaki
 
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)Satoshi Yamada
 
timeVaringMappedFixedValueについて
timeVaringMappedFixedValueについてtimeVaringMappedFixedValueについて
timeVaringMappedFixedValueについてDaisuke Matsubara
 
問合せ最適化インサイド
問合せ最適化インサイド問合せ最適化インサイド
問合せ最適化インサイドTakahiro Itagaki
 
XMLPro 4回目 文字入力 条件分岐
XMLPro 4回目 文字入力 条件分岐XMLPro 4回目 文字入力 条件分岐
XMLPro 4回目 文字入力 条件分岐XMLProJ2014
 
NOPのための STL-Allocaterの設計と実装
NOPのための STL-Allocaterの設計と実装NOPのための STL-Allocaterの設計と実装
NOPのための STL-Allocaterの設計と実装Yuta Ogura
 

Tendances (19)

for関数を使った繰り返し処理によるヒストグラムの一括出力
for関数を使った繰り返し処理によるヒストグラムの一括出力for関数を使った繰り返し処理によるヒストグラムの一括出力
for関数を使った繰り返し処理によるヒストグラムの一括出力
 
状態空間モデルの実行方法と実行環境の比較
状態空間モデルの実行方法と実行環境の比較状態空間モデルの実行方法と実行環境の比較
状態空間モデルの実行方法と実行環境の比較
 
PostgreSQL SQLチューニング入門 実践編(pgcon14j)
PostgreSQL SQLチューニング入門 実践編(pgcon14j)PostgreSQL SQLチューニング入門 実践編(pgcon14j)
PostgreSQL SQLチューニング入門 実践編(pgcon14j)
 
Altanative macro
Altanative macroAltanative macro
Altanative macro
 
Rの高速化
Rの高速化Rの高速化
Rの高速化
 
200319 eash python_shareslide_functions
200319 eash python_shareslide_functions200319 eash python_shareslide_functions
200319 eash python_shareslide_functions
 
Deque with Haskel
Deque with HaskelDeque with Haskel
Deque with Haskel
 
Ambient使ってみた
Ambient使ってみたAmbient使ってみた
Ambient使ってみた
 
Subprocess no susume
Subprocess no susumeSubprocess no susume
Subprocess no susume
 
Python で munin plugin を書いてみる
Python で munin plugin を書いてみるPython で munin plugin を書いてみる
Python で munin plugin を書いてみる
 
入門機械学習6章
入門機械学習6章入門機械学習6章
入門機械学習6章
 
巨大な表を高速に扱うData.table について
巨大な表を高速に扱うData.table について巨大な表を高速に扱うData.table について
巨大な表を高速に扱うData.table について
 
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
 
timeVaringMappedFixedValueについて
timeVaringMappedFixedValueについてtimeVaringMappedFixedValueについて
timeVaringMappedFixedValueについて
 
問合せ最適化インサイド
問合せ最適化インサイド問合せ最適化インサイド
問合せ最適化インサイド
 
XMLPro 4回目 文字入力 条件分岐
XMLPro 4回目 文字入力 条件分岐XMLPro 4回目 文字入力 条件分岐
XMLPro 4回目 文字入力 条件分岐
 
ALPSチュートリアル(5) ALPS Python入門
ALPSチュートリアル(5) ALPS Python入門ALPSチュートリアル(5) ALPS Python入門
ALPSチュートリアル(5) ALPS Python入門
 
前期講座09
前期講座09前期講座09
前期講座09
 
NOPのための STL-Allocaterの設計と実装
NOPのための STL-Allocaterの設計と実装NOPのための STL-Allocaterの設計と実装
NOPのための STL-Allocaterの設計と実装
 

En vedette

P90 X Your Database!!
P90 X Your Database!!P90 X Your Database!!
P90 X Your Database!!Denish Patel
 
اختلاف القراءات من صيغة الماضي إلى غيرها دراسة دلالية
اختلاف القراءات من صيغة الماضي إلى غيرها دراسة دلاليةاختلاف القراءات من صيغة الماضي إلى غيرها دراسة دلالية
اختلاف القراءات من صيغة الماضي إلى غيرها دراسة دلاليةسمير بسيوني
 
AWS Webcast - Achieving consistent high performance with Postgres on Amazon W...
AWS Webcast - Achieving consistent high performance with Postgres on Amazon W...AWS Webcast - Achieving consistent high performance with Postgres on Amazon W...
AWS Webcast - Achieving consistent high performance with Postgres on Amazon W...Amazon Web Services
 
Advanced Postgres Monitoring
Advanced Postgres MonitoringAdvanced Postgres Monitoring
Advanced Postgres MonitoringDenish Patel
 
Postgres in Amazon RDS
Postgres in Amazon RDSPostgres in Amazon RDS
Postgres in Amazon RDSDenish Patel
 
6 Valuable Lessons on How to Turn a Profit - @cnbc @marcuslemonis #TheProfit
6 Valuable Lessons on How to Turn a Profit - @cnbc @marcuslemonis #TheProfit6 Valuable Lessons on How to Turn a Profit - @cnbc @marcuslemonis #TheProfit
6 Valuable Lessons on How to Turn a Profit - @cnbc @marcuslemonis #TheProfitEmpowered Presentations
 
An Overview of Designing Microservices Based Applications on AWS - March 2017...
An Overview of Designing Microservices Based Applications on AWS - March 2017...An Overview of Designing Microservices Based Applications on AWS - March 2017...
An Overview of Designing Microservices Based Applications on AWS - March 2017...Amazon Web Services
 
LinkedIn Q4 2015 Earnings Call
LinkedIn Q4 2015 Earnings CallLinkedIn Q4 2015 Earnings Call
LinkedIn Q4 2015 Earnings CallLinkedIn
 
Dear NSA, let me take care of your slides.
Dear NSA, let me take care of your slides.Dear NSA, let me take care of your slides.
Dear NSA, let me take care of your slides.Emiland
 
UX, ethnography and possibilities: for Libraries, Museums and Archives
UX, ethnography and possibilities: for Libraries, Museums and ArchivesUX, ethnography and possibilities: for Libraries, Museums and Archives
UX, ethnography and possibilities: for Libraries, Museums and ArchivesNed Potter
 
Visual Design with Data
Visual Design with DataVisual Design with Data
Visual Design with DataSeth Familian
 

En vedette (13)

P90 X Your Database!!
P90 X Your Database!!P90 X Your Database!!
P90 X Your Database!!
 
69
6969
69
 
اختلاف القراءات من صيغة الماضي إلى غيرها دراسة دلالية
اختلاف القراءات من صيغة الماضي إلى غيرها دراسة دلاليةاختلاف القراءات من صيغة الماضي إلى غيرها دراسة دلالية
اختلاف القراءات من صيغة الماضي إلى غيرها دراسة دلالية
 
AWS Webcast - Achieving consistent high performance with Postgres on Amazon W...
AWS Webcast - Achieving consistent high performance with Postgres on Amazon W...AWS Webcast - Achieving consistent high performance with Postgres on Amazon W...
AWS Webcast - Achieving consistent high performance with Postgres on Amazon W...
 
Advanced Postgres Monitoring
Advanced Postgres MonitoringAdvanced Postgres Monitoring
Advanced Postgres Monitoring
 
Postgres in Amazon RDS
Postgres in Amazon RDSPostgres in Amazon RDS
Postgres in Amazon RDS
 
6 Valuable Lessons on How to Turn a Profit - @cnbc @marcuslemonis #TheProfit
6 Valuable Lessons on How to Turn a Profit - @cnbc @marcuslemonis #TheProfit6 Valuable Lessons on How to Turn a Profit - @cnbc @marcuslemonis #TheProfit
6 Valuable Lessons on How to Turn a Profit - @cnbc @marcuslemonis #TheProfit
 
An Overview of Designing Microservices Based Applications on AWS - March 2017...
An Overview of Designing Microservices Based Applications on AWS - March 2017...An Overview of Designing Microservices Based Applications on AWS - March 2017...
An Overview of Designing Microservices Based Applications on AWS - March 2017...
 
LinkedIn Q4 2015 Earnings Call
LinkedIn Q4 2015 Earnings CallLinkedIn Q4 2015 Earnings Call
LinkedIn Q4 2015 Earnings Call
 
How To Win That Next Sales Presentation - @High_Spark @cliffatkinson
How To Win That Next Sales Presentation - @High_Spark @cliffatkinsonHow To Win That Next Sales Presentation - @High_Spark @cliffatkinson
How To Win That Next Sales Presentation - @High_Spark @cliffatkinson
 
Dear NSA, let me take care of your slides.
Dear NSA, let me take care of your slides.Dear NSA, let me take care of your slides.
Dear NSA, let me take care of your slides.
 
UX, ethnography and possibilities: for Libraries, Museums and Archives
UX, ethnography and possibilities: for Libraries, Museums and ArchivesUX, ethnography and possibilities: for Libraries, Museums and Archives
UX, ethnography and possibilities: for Libraries, Museums and Archives
 
Visual Design with Data
Visual Design with DataVisual Design with Data
Visual Design with Data
 

Similaire à generate_series関数使い込み

20090107 Postgre Sqlチューニング(Sql編)
20090107 Postgre Sqlチューニング(Sql編)20090107 Postgre Sqlチューニング(Sql編)
20090107 Postgre Sqlチューニング(Sql編)Hiromu Shioya
 
Introduction of Oracle Database Architecture
Introduction of Oracle Database ArchitectureIntroduction of Oracle Database Architecture
Introduction of Oracle Database ArchitectureRyota Watabe
 
PostgreSQL 9.5 の新機能
PostgreSQL 9.5 の新機能PostgreSQL 9.5 の新機能
PostgreSQL 9.5 の新機能Shigetaka Yachi
 
20181110 fok2018-pg-extension
20181110 fok2018-pg-extension20181110 fok2018-pg-extension
20181110 fok2018-pg-extensionToshi Harada
 
20190119 aws-study-pg-extension
20190119 aws-study-pg-extension20190119 aws-study-pg-extension
20190119 aws-study-pg-extensionToshi Harada
 
KOF2015 PostgreSQL 9.5
KOF2015 PostgreSQL 9.5KOF2015 PostgreSQL 9.5
KOF2015 PostgreSQL 9.5Toshi Harada
 
db tech showcase 2019 D10 Oracle Database New Features
db tech showcase 2019 D10 Oracle Database New Featuresdb tech showcase 2019 D10 Oracle Database New Features
db tech showcase 2019 D10 Oracle Database New FeaturesNoriyoshi Shinoda
 
Pgunconf 20121212-postgeres fdw
Pgunconf 20121212-postgeres fdwPgunconf 20121212-postgeres fdw
Pgunconf 20121212-postgeres fdwToshi Harada
 
PostgreSQL Unconference #29 Unicode IVS
PostgreSQL Unconference #29 Unicode IVSPostgreSQL Unconference #29 Unicode IVS
PostgreSQL Unconference #29 Unicode IVSNoriyoshi Shinoda
 
Let's scale-out PostgreSQL using Citus (Japanese)
Let's scale-out PostgreSQL using Citus (Japanese)Let's scale-out PostgreSQL using Citus (Japanese)
Let's scale-out PostgreSQL using Citus (Japanese)Noriyoshi Shinoda
 
MySQL8.0 SYS スキーマ概要
MySQL8.0 SYS スキーマ概要MySQL8.0 SYS スキーマ概要
MySQL8.0 SYS スキーマ概要Shinya Sugiyama
 
PostgreSQL10徹底解説
PostgreSQL10徹底解説PostgreSQL10徹底解説
PostgreSQL10徹底解説Masahiko Sawada
 
Chugokudb study-20150131
Chugokudb study-20150131Chugokudb study-20150131
Chugokudb study-20150131Toshi Harada
 
Lt 関数の変動性分類についておさらいしてみる。
Lt 関数の変動性分類についておさらいしてみる。Lt 関数の変動性分類についておさらいしてみる。
Lt 関数の変動性分類についておさらいしてみる。Toshi Harada
 
自己結合Sqlクエリ検出ツールによるチューニングの提案
自己結合Sqlクエリ検出ツールによるチューニングの提案自己結合Sqlクエリ検出ツールによるチューニングの提案
自己結合Sqlクエリ検出ツールによるチューニングの提案拓也 岸本
 
20190625 OpenACC 講習会 第3部
20190625 OpenACC 講習会 第3部20190625 OpenACC 講習会 第3部
20190625 OpenACC 講習会 第3部NVIDIA Japan
 
PostgreSQL Unconference #5 ICU Collation
PostgreSQL Unconference #5 ICU CollationPostgreSQL Unconference #5 ICU Collation
PostgreSQL Unconference #5 ICU CollationNoriyoshi Shinoda
 
YugabyteDBの実行計画を眺める(NewSQL/分散SQLデータベースよろず勉強会 #3 発表資料)
YugabyteDBの実行計画を眺める(NewSQL/分散SQLデータベースよろず勉強会 #3 発表資料)YugabyteDBの実行計画を眺める(NewSQL/分散SQLデータベースよろず勉強会 #3 発表資料)
YugabyteDBの実行計画を眺める(NewSQL/分散SQLデータベースよろず勉強会 #3 発表資料)NTT DATA Technology & Innovation
 

Similaire à generate_series関数使い込み (20)

20090107 Postgre Sqlチューニング(Sql編)
20090107 Postgre Sqlチューニング(Sql編)20090107 Postgre Sqlチューニング(Sql編)
20090107 Postgre Sqlチューニング(Sql編)
 
Introduction of Oracle Database Architecture
Introduction of Oracle Database ArchitectureIntroduction of Oracle Database Architecture
Introduction of Oracle Database Architecture
 
PostgreSQL 9.5 の新機能
PostgreSQL 9.5 の新機能PostgreSQL 9.5 の新機能
PostgreSQL 9.5 の新機能
 
20181110 fok2018-pg-extension
20181110 fok2018-pg-extension20181110 fok2018-pg-extension
20181110 fok2018-pg-extension
 
20190119 aws-study-pg-extension
20190119 aws-study-pg-extension20190119 aws-study-pg-extension
20190119 aws-study-pg-extension
 
KOF2015 PostgreSQL 9.5
KOF2015 PostgreSQL 9.5KOF2015 PostgreSQL 9.5
KOF2015 PostgreSQL 9.5
 
db tech showcase 2019 D10 Oracle Database New Features
db tech showcase 2019 D10 Oracle Database New Featuresdb tech showcase 2019 D10 Oracle Database New Features
db tech showcase 2019 D10 Oracle Database New Features
 
Pgunconf 20121212-postgeres fdw
Pgunconf 20121212-postgeres fdwPgunconf 20121212-postgeres fdw
Pgunconf 20121212-postgeres fdw
 
PostgreSQL Unconference #29 Unicode IVS
PostgreSQL Unconference #29 Unicode IVSPostgreSQL Unconference #29 Unicode IVS
PostgreSQL Unconference #29 Unicode IVS
 
Let's scale-out PostgreSQL using Citus (Japanese)
Let's scale-out PostgreSQL using Citus (Japanese)Let's scale-out PostgreSQL using Citus (Japanese)
Let's scale-out PostgreSQL using Citus (Japanese)
 
MySQL8.0 SYS スキーマ概要
MySQL8.0 SYS スキーマ概要MySQL8.0 SYS スキーマ概要
MySQL8.0 SYS スキーマ概要
 
PostgreSQL10徹底解説
PostgreSQL10徹底解説PostgreSQL10徹底解説
PostgreSQL10徹底解説
 
Chugokudb study-20150131
Chugokudb study-20150131Chugokudb study-20150131
Chugokudb study-20150131
 
Lt 関数の変動性分類についておさらいしてみる。
Lt 関数の変動性分類についておさらいしてみる。Lt 関数の変動性分類についておさらいしてみる。
Lt 関数の変動性分類についておさらいしてみる。
 
自己結合Sqlクエリ検出ツールによるチューニングの提案
自己結合Sqlクエリ検出ツールによるチューニングの提案自己結合Sqlクエリ検出ツールによるチューニングの提案
自己結合Sqlクエリ検出ツールによるチューニングの提案
 
20190625 OpenACC 講習会 第3部
20190625 OpenACC 講習会 第3部20190625 OpenACC 講習会 第3部
20190625 OpenACC 講習会 第3部
 
PostgreSQL Unconference #5 ICU Collation
PostgreSQL Unconference #5 ICU CollationPostgreSQL Unconference #5 ICU Collation
PostgreSQL Unconference #5 ICU Collation
 
YugabyteDBの実行計画を眺める(NewSQL/分散SQLデータベースよろず勉強会 #3 発表資料)
YugabyteDBの実行計画を眺める(NewSQL/分散SQLデータベースよろず勉強会 #3 発表資料)YugabyteDBの実行計画を眺める(NewSQL/分散SQLデータベースよろず勉強会 #3 発表資料)
YugabyteDBの実行計画を眺める(NewSQL/分散SQLデータベースよろず勉強会 #3 発表資料)
 
Mysql charset
Mysql charsetMysql charset
Mysql charset
 
PostgreSQL 12の話
PostgreSQL 12の話PostgreSQL 12の話
PostgreSQL 12の話
 

generate_series関数使い込み

  • 2. generate_series関数とは • 集合を返す関数 2 SELECT * FROM generate_series(2,4); generate_series ----------------- 2 3 4 SELECT * FROM generate_series('2008-03-01 00:00'::timestamp, '2008-03-04 12:00', '10 hours'); generate_series --------------------- 2008-03-01 00:00:00 2008-03-01 10:00:00 2008-03-01 20:00:00 2008-03-02 06:00:00 :
  • 3. 一般的?な用途 • 試験用データの作成 • 存在しない値を集計結果に表示する • 行列変換 3 PostgreSQLでテストデータを作成する— Let's Postgres http://lets.postgresql.jp/documents/technical/gen_data/1 Postgres generate_series関数によるデータの生成| Fusic Developers Weblog http://blog.fusic.co.jp/archives/810 列を行に変換する- PostgreSQL 雑記- postgresqlグループ http://postgresql.g.hatena.ne.jp/pgsql/20110414 行を列に変換する- PostgreSQL 雑記- postgresqlグループ http://postgresql.g.hatena.ne.jp/pgsql/20110416
  • 4. 前方最長完全一致検索 • 条件 ・検索文字列「ABCDE」を対象列から検索する ・前方から最も完全一致している文字数が多い行を取得する ・ただし、検索文字列に含まれていない文字が含まれる行は つまり・・・ 4 取得対象外とする A ← 一致 BC ← 不一致(Aから始まっていない) ABC ← 一致 ABCD ← 一致(最長) ABCDEF← 不一致 (Fが検索文字列に含まれていないため不一致)
  • 5. 前方最長完全一致検索 • クエリ例 5 SELECT * FROM test; col1 -------- A BC ABC ABCD ABCDEF SELECT * FROM test WHERE col1 IN (SELECT left('ABCDE',generate_series(1,length('ABCDE')))) ORDER BY length(col1) DESC LIMIT 1; col1 ------ ABCD left ------- A AB ABC ABCD ABCDE 最長の完全一致を取得
  • 6. 文字列のソート • order byでの列ソートではなく文字列毎のソート • つまり 「PQODJHAZBDVACWKABOWPX」を 「AAABBCDDHJKOOPPQVWWXZ」とする 6
  • 7. 文字列のソート • 途中クエリ1 7 SELECT col1 FROM (SELECT generate_series(1,3) col1) foo; col1 ------ 1 2 3 配列を文字列に変換複数行を配列に変換 SELECT array_to_string(array_agg(col1),'') FROM (SELECT generate_series(1,3) col1) foo; array_to_string ----------------- 123 複数行を集約できる
  • 8. 文字列のソート • 途中クエリ2 8 SELECT * FROM test; col1 ------ SQL DATA SELECT col1,substr(col1,generate_series(1,length(col1)),1) sub FROM test ORDER BY col1,sub; col1 | sub ------+----- DATA | A DATA | A DATA | D DATA | T SQL | L SQL | Q SQL | S 1文字ずつ分解してsort
  • 9. 文字列のソート • クエリ例 9 SELECT * FROM test; col1 ----------------------- PQODJHAZBDVACWKABOWPX UDFPGIEHAPTNVUDIIEHAO SELECT col1,array_to_string(array_agg(sub),'') sorted FROM (SELECT col1,substr(col1, generate_series(1,length(col1)),1) sub FROM test ORDER BY col1,sub) foo GROUP BY col1; col1 | sorted -----------------------+----------------------- PQODJHAZBDVACWKABOWPX | AAABBCDDHJKOOPPQVWWXZ UDFPGIEHAPTNVUDIIEHAO | AADDEEFGHHIIINOPPTUUV
  • 10. 欠番探し • クエリ例 10 SELECT id FROM test; id --------- ID00005 ID00006 ID00008 ID00009 ID00010 SELECT id FROM (SELECT 'ID' || lpad(generate_series(1,10)::text,5,'0') id) foo WHERE id NOT IN (SELECT id FROM test); id --------- ID00001 ID00002 ID00003 ID00004 ID00007 id --------- ID00001 ID00002 ID00003 ID00004 ID00005 ID00006 ID00007 ID00008 ID00009 ID00010 文字列連結、lpad、 castを併用