teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

7

追記

2021/07/08 05:27

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -39,7 +39,8 @@
39
39
 
40
40
  postgresの場合pivotは面倒ですから、Accessでクロス集計を行うなど他のツールを使うとか、array_aggで纏めたものをエクセルの区切り位置指定で分割するとか、SQLだけではなく他にも効率化できるところがあったりします。
41
41
 
42
- 同じような事をした場合に使ったツールは(pgadmin,A5-SQL,Access,Excel)辺りですね。
42
+ 同じような事をした場合に使ったツールは(サクラエディタ,pgadmin,A5-SQL,Access,Excel)辺りですね。
43
+ 特にサクラエディタは、SQLソースのメンテや、大量データの確認など非常に有用です。
43
44
 
44
45
  > 2.間違えているデータを出さないために気をつけるべき点。または間違えていることにいち早く気付ける方法など
45
46
 

6

推敲

2021/07/08 05:27

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -8,6 +8,7 @@
8
8
  > サブクエリ多用してしまっている
9
9
 
10
10
  分離する事で、使う場面が絞り込まれると思います。
11
+
11
12
  **・記録する事**
12
13
   そのシステムで使用したSQLは保存しておき、流用する。
13
14
 

5

推敲

2021/07/07 14:37

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -21,9 +21,9 @@
21
21
  select (AB.recA).*, (AB.recB).value, c.value
22
22
  from (
23
23
  select (A.*)::tblA recA, (B.*)::tblB recB
24
- from tblA a inner join tblB b
24
+ from tblA a left join tblB b
25
25
  on a.key=b.key
26
- ) AB inner join tblC c
26
+ ) AB left join tblC c
27
27
  on (AB.recb).Key=c.key
28
28
  ```
29
29
  **・一括のコピー&ペーストが出来る場面を探す。**

4

訂正

2021/07/07 14:36

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -18,7 +18,7 @@
18
18
  リレーションの関係で同じ項目名があった場合のネストで、項目にエイリアスを付けないと駄目な場面で活躍します。
19
19
  例えば、(key, value)の構造を持つtblA,tblB,tblCがあったとして以下の様に記述できます。
20
20
  ```SQL
21
- select (recA).*, (recB).value, c.value
21
+ select (AB.recA).*, (AB.recB).value, c.value
22
22
  from (
23
23
  select (A.*)::tblA recA, (B.*)::tblB recB
24
24
  from tblA a inner join tblB b

3

追記

2021/07/07 14:32

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -5,7 +5,9 @@
5
5
  抽出項目は削除したり追加すれば良いだけ。
6
6
  条件の無いビューに対して、キーを条件にした条件用のクエリーを準備するイメージです。
7
7
  ビューと条件用のクエリーではテーブルが重複しますが、分離させた方が効率的です。
8
+ > サブクエリ多用してしまっている
8
9
 
10
+ 分離する事で、使う場面が絞り込まれると思います。
9
11
  **・記録する事**
10
12
   そのシステムで使用したSQLは保存しておき、流用する。
11
13
 

2

推敲

2021/07/07 14:30

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -13,8 +13,8 @@
13
13
   複雑になるとネストが深くなったりしますが、**with**を使用したり、**テーブル構造を型**として利用する事ができるpostgresの特徴(`*`)を利用すると簡潔になります。
14
14
 
15
15
  `*`
16
+ リレーションの関係で同じ項目名があった場合のネストで、項目にエイリアスを付けないと駄目な場面で活躍します。
16
17
  例えば、(key, value)の構造を持つtblA,tblB,tblCがあったとして以下の様に記述できます。
17
- リレーションの関係で同じ項目名があった場合のネストで、項目にエイリアスを付けないと駄目な場面で活躍します。
18
18
  ```SQL
19
19
  select (recA).*, (recB).value, c.value
20
20
  from (

1

追記

2021/07/07 14:27

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -2,14 +2,42 @@
2
2
 
3
3
  **・データの抽出と条件を分ける事**
4
4
   テーブルの結合条件は決まっているのですから、用途に応じて条件を変えれば良いだけにする。
5
-  抽出項目は削除したり追加すれば良いだけ。
5
+ 抽出項目は削除したり追加すれば良いだけ。
6
+ 条件の無いビューに対して、キーを条件にした条件用のクエリーを準備するイメージです。
7
+ ビューと条件用のクエリーではテーブルが重複しますが、分離させた方が効率的です。
6
8
 
7
9
  **・記録する事**
8
10
   そのシステムで使用したSQLは保存しておき、流用する。
9
11
 
10
12
  **・簡潔な記述になるようにする。**
11
-  複雑になるとネストが深くなったりしますが、**with**を使用したり、**テーブル構造を型**として利用する事ができるpostgresの特徴を利用すると簡潔になります。
13
+  複雑になるとネストが深くなったりしますが、**with**を使用したり、**テーブル構造を型**として利用する事ができるpostgresの特徴(`*`)を利用すると簡潔になります。
12
14
 
15
+ `*`
16
+ 例えば、(key, value)の構造を持つtblA,tblB,tblCがあったとして以下の様に記述できます。
17
+ リレーションの関係で同じ項目名があった場合のネストで、項目にエイリアスを付けないと駄目な場面で活躍します。
18
+ ```SQL
19
+ select (recA).*, (recB).value, c.value
20
+ from (
21
+ select (A.*)::tblA recA, (B.*)::tblB recB
22
+ from tblA a inner join tblB b
23
+ on a.key=b.key
24
+ ) AB inner join tblC c
25
+ on (AB.recb).Key=c.key
26
+ ```
27
+ **・一括のコピー&ペーストが出来る場面を探す。**
28
+ 項目の列挙や条件の列挙など、外部の文字情報を1項目ではなく纏めてコピーできると効率的です。
29
+ 矩形貼付けなどが出来るテキストエディタの活用と、インデントを揃える習慣付けで効率化が図れます。
30
+
31
+ また、処理用のテーブルを準備して貼付けして利用するような事も考えられます。
32
+
33
+ **・ツールの活用**
34
+ 分析結果の報告する場合excelが多いと思いますが、報告の為の整形の手間も見落としがちです。
35
+ SQLの結果をエクセルにコピー&ペーストするだけで済むように工夫すると良いでしょう。
36
+
37
+ postgresの場合pivotは面倒ですから、Accessでクロス集計を行うなど他のツールを使うとか、array_aggで纏めたものをエクセルの区切り位置指定で分割するとか、SQLだけではなく他にも効率化できるところがあったりします。
38
+
39
+ 同じような事をした場合に使ったツールは(pgadmin,A5-SQL,Access,Excel)辺りですね。
40
+
13
41
  > 2.間違えているデータを出さないために気をつけるべき点。または間違えていることにいち早く気付ける方法など
14
42
 
15
43
  **・条件に関係するものもselect項目にして確認**