SQL を使用したファイル ジオデータベースでのレポートと分析
QueryDef の SubFields(フィールド リスト)メソッドを介して式とエイリアスを使用すると、ファイル ジオデータベースでの分析とレポートが向上します。さらに、PostFixClause を通じて ORDER BY と GROUP BY がサポートされます。GROUP BY のサポートでは、式に MIN、MAX、SUM などの集計関数が含まれます。
ALIAS
わかりやすい出力にするために、コラムに別の名前を付けます。
SQL
SELECT NAME, POP1997 - POP1990 as PopChange
FROM counties ORDER BY NAME
ArcObjects
pQueryDef.SubFields = "NAME, POP1997 - POP1990 as PopChange"
pQueryDef.Tables = "counties"
pQueryDef.PostfixClause = "ORDER BY NAME"
CASE
条件のリストを評価し、結果式の 1 つを返します。
SQL
SELECT name,salary,
CASE
WHEN salary <= 2000 THEN 'low'
WHEN salary > 2000 AND salary <= 3000 THEN 'average'
WHEN salary > 3000 THEN 'high'
END AS salary_level
FROM employees
ORDER BY salary ASC
ArcObjects
pQueryDef.SubFields = "name,salary,
CASE
WHEN salary <= 2000 THEN 'low'
WHEN salary > 2000 AND salary <= 3000 THEN 'average'
WHEN salary > 3000 THEN 'high'
END AS salary_level"
pQueryDef.Tables = " employees"
pQueryDef.PostfixClause = " ORDER BY salary ASC "
COALESCE
引数の中から最初の NULL 以外のフィールド値を返します。
SQL
SELECT Name, COALESCE(Business_Phone, Cell_Phone, Home_Phone)
Contact_Phone
FROM Contact_Info
ArcObjects
queryDef.SubFields = "Name, COALESCE(Business_Phone, Cell_Phone,
Home_Phone) Contact_Phone"
queryDef.Tables = "Contact_Info"
Contact_Info:
名前 |
Business_Phone |
Cell_Phone |
Home_Phone |
Jeff |
531-2531 |
622-7813 |
565-9901 |
Laura |
NULL |
772-5588 |
312-4088 |
Peter |
NULL |
NULL |
594-7477 |
結果:
名前 |
Contact_Phone |
Jeff |
531-2531 |
Laura |
772-5588 |
Peter |
594-7477 |
EXPRESSIONS
SQL
SELECT SIN(sunangle)
FROM sightings
ArcObjects
queryDef.SubFields = "SIN(sunangle)"
queryDef.Tables = "sightings"
SET FUNCTIONS
演算子 | 説明 |
AVG |
グループ内のすべての値の平均を計算します。NULL 値は無視されます。 |
COUNT(*)、COUNT(式) |
COUNT(*)は、テーブルのレコード数を返します。NULL も含められます。COUNT(式)は、指定された式の値の数を返します。NULL は無視されます。 |
MAX |
グループ内の最大値を見つけます。NULL 値は無視されます。 |
MIN |
グループ内の最小値を見つけます。NULL 値は無視されます。 |
STDDEV、STDDEV_SAMP |
式のサンプル標準偏差を返します。 |
STDDEV_POP |
式の母標準偏差を返します。 |
SUM |
グループ内の値を見つけます。NULL 値は無視されます。 |
VAR、VAR_SAMP |
式のサンプル分散を返します。 |
VAR_POP |
式の母分散を返します。 |
ARITHMETIC OPERATIORS
算術演算子を使用して、数値の加算、減算、乗算、除算を実行します。
演算子 | 説明 |
* |
乗算のための算術演算子 |
/ |
除算のための算術演算子 |
+ |
加算のための算術演算子 |
- |
減算のための算術演算子 |
FUNCTIONS
ファイル ジオデータベースでサポートされる関数の完全リストを以下に示します。
日付関数
関数 | 説明 |
CURRENT_DATE |
現在の日付を返します。 |
EXTRACT(extract_field FROM extract_source) |
extract_source から extract_field の部分を返します。extract_source 引数は、日時を表す式です。extract_field 引数には、YEAR、MONTH、DAY、HOUR、MINUTE、または SECOND のいずれかのキーワードを指定できます。 |
CURRENT TIME |
現在の時刻を返します。 |
CURRENT_TIMESTAMP |
現在の日付と時刻を返します。 |
文字列関数
引数 string_exp には、列の名前、文字列リテラル、またはデータ タイプを文字型として表すことができる別のスカラー関数の結果を指定することができます。
引数 character_exp は、可変長の文字列です。
引数 start または length には、数値リテラル、またはデータ タイプを数値型として表すことができる別のスカラー関数の結果を指定することができます。
文字列関数は 1 から始まります。つまり、文字列の最初の文字は 1 文字目となります。
関数 | 説明 |
CHAR_LENGTH(string_exp) |
文字列の長さ(文字数)を返します。 |
CONCAT(string_exp1, string_exp2) |
string_exp2 を string_exp1 に連結した結果として得られる文字列を返します。 |
LOWER(string_exp) |
string_exp のすべての大文字を小文字に変換した文字列を返します。 |
POSITION(character_exp IN character_exp) |
第 2 文字式に含まれている第 1 文字式の位置を返します。この結果は、精度とスケールを持つ厳密な数値であり、精度は実装定義、スケールは 0 です。 |
SUBSTRING (string_exp FROM start FOR length) |
start で指定した文字位置から length で指定した文字数の文字列を string_exp から取得して返します。 |
TRIM(BOTH | LEADING | TRAILING trim_character FROM string_exp) |
string_exp の先頭、末尾、または両端から trim_character を削除した文字列を返します。 |
UPPER(string_exp) |
string_exp に一致する文字列を返します。すべての小文字が大文字に変換されます。 |
数値関数
すべての数値関数は数値を返します。
numeric_exp、float_exp、または integer_exp 引数には、データ タイプを数値型として表すことができる列の名前、別のスカラー関数の結果、または数値リテラルを指定することができます。
関数 | 説明 |
ABS(numeric_exp) |
numeric_exp の絶対値を返します。 |
ACOS(float_exp) |
角度をラジアンで示した float_exp の逆余弦を返します。 |
ASIN(float_exp) |
角度をラジアンで示した float_exp の逆正弦を返します。 |
ATAN(float_exp) |
角度をラジアンで示した float_exp の逆正接を返します。 |
CEILING(numeric_exp) |
numeric_exp 以上の最も小さい整数を返します。 |
COS(float_exp) |
角度をラジアンで示した float_exp の余弦を返します。 |
FLOOR(numeric_exp) |
numeric_exp 以下の最も大きい整数を返します。 |
LOG(float_exp) |
float_exp の自然対数を返します。 |
LOG10(float_exp) |
float_exp の底が 10 の対数を返します。 |
MOD(integer_exp1, integer_exp2) |
integer_exp2 で除算された integer_exp1 の余りを返します。 |
POWER(numeric_exp, integer_exp) |
numeric_exp に integer_exp を累乗した値を返します。 |
ROUND(numeric_exp, integer_exp) |
numeric_exp を小数点以下の integer_exp で表される桁に丸めた値を返します。integer_exp が負の場合、numeric_exp は小数点以上の |integer_exp| で表される桁に丸められます。 |
SIGN(numeric_exp) |
numeric_exp の符号を表す値を返します。numeric_exp が 0 よりも小さい場合は -1 が返されます。numeric_exp が 0 の場合、0 が返されます。numeric_exp が 0 より大きい場合は 1 が返されます。 |
SIN(float_exp) |
ラジアンで角度を示した float_exp の正弦を返します。 |
TAN(float_exp) |
ラジアンで角度を示した float_exp の正接を返します。 |
TRUNCATE(numeric_exp, integer_exp) |
numeric_exp を小数点以下の integer_exp で表される桁に丸めた値を返します。integer_exp が負の場合、numeric_exp は小数点以上の |integer_exp| で表される桁に切り捨てられます。 |
GROUP BY
複数のレコードのデータを収集し、1 つ以上の列ごとに結果をグループ化するために使用します。
SQL
SELECT STATE_NAME, SUM(POP1990) as TotalPopulation
FROM counties
GROUP BY STATE_NAME ORDER BY STATE_NAME
ArcObjects
pQueryDef.SubFields = "STATE_NAME, SUM(POP1990) as
TotalPopulation"
pQueryDef.Tables = "counties"
pQueryDef.PostfixClause = "GROUP BY STATE_NAME ORDER BY
STATE_NAME"
HAVING
GROUP BY の Where 句です。
SQL
SELECT department, MAX(salary) as Highest_salary
FROM employees
GROUP BY department HAVING MAX(salary) < 50000
ArcObjects
queryDef.SubFields = "department, MAX(salary) as Highest_salary"
queryDef.Tables = "employees"
pQueryDef.PostfixClause = "GROUP BY department HAVING MAX(salary)
< 50000"
JOINS
2 つ以上のテーブルからレコードを結合させます。
Cross Join
SQL
SELECT Table1.name, Table1.Address, Table2.name, Table2.Salary
FROM Table1 CROSS JOIN Table2
ArcObjects
queryDef.SubFields = "Table1.name, Table1.Address, Table2.name,
Table2.Salary"
queryDef.Tables = "Table1 CROSS JOIN Table2"
Inner Join
SQL
SELECT Table1.C1, Table1.C2, Table2.C3, Table2.C4 FROM Table1
INNER JOIN Table2 ON Table1.C1 = Table2.C3
ArcObjects
queryDef.SubFields = "Table1.C1, Table1.C2, Table2.C3,
Table2.C4"
queryDef.Tables = "Table1 INNER JOIN Table2 ON Table1.C1 =
Table2.C3"
Left Outer Join
SQL
SELECT Table1.C1, Table1.C2, Table2.C3, Table2.C4 FROM Table1
LEFT OUTER JOIN Table2 ON Table1.C1 = Table2.C3
ArcObjects
queryDef.SubFields = "Table1.C1, Table1.C2, Table2.C3,
Table2.C4"
queryDef.Tables = "Table1 LEFT OUTER JOIN Table2 ON Table1.C1 =
Table2.C3"
Right Outer Join
SQL
SELECT * FROM Table1 RIGHT OUTER JOIN Table2 ON Table1.C1 =
Table2.C3
ArcObjects
queryDef.SubFields = "*"
queryDef.Tables = "Table1 RIGHT OUTER JOIN Table2 ON Table1.C1 =
Table2.C3"
NULLIF
指定された 2 つのパラメータが等しい場合、NULLIF により NULL が返されます。そうでない場合、最初のパラメータの値が返されます。
SQL
SELECT Location, NULLIF(Sales, Forecast) as Results FROM
StoreSales
ArcObjects
queryDef.SubFields = " Location, NULLIF(Sales, Forecast) as
Results"
queryDef.Tables = "StoreSales"
StoreSales:
場所 | 売上 | 予測 |
Redlands |
39000 |
55000 |
Palm Springs |
60000 |
61000 |
Riverside |
40000 |
40000 |
結果:
場所 | 結果 |
Redlands |
39000 |
Palm Springs |
60000 |
Riverside |
NULL |
ORDER BY
ソート順を指定します。順序には、昇順(ASC)または降順(DESC)の 2 種類があり、順序化の後照合されます。照合タイプには、BINARY(BIN)、CASESENSITIVE(CASE)、NOCASESENSITIVE(NOCASE)があります。BINARY 照合では、大文字小文字とアクセントの両方が区別されます。CASESENSITIVE では、大文字と小文字が区別されます。NOCASESENSITIVE では、大文字と小文字は区別されません。
SQL
SELECT STATE_NAME, POP1990
FROM counties ORDER BY STATE_NAME
ArcObjects
pQueryDef.SubFields = "STATE_NAME, POP1990"
pQueryDef.Tables = "counties"
pQueryDef.PostfixClause = "ORDER BY STATE_NAME"
SQL
SELECT STATE_NAME, POP1990
FROM counties ORDER BY STATE_NAME COLLATE BINARY ASC
ArcObjects
pQueryDef.SubFields = "STATE_NAME, POP1990"
pQueryDef.Tables = "counties"
pQueryDef.PostfixClause = "ORDER BY STATE_NAME COLLATE BINARY
ASC"