回答編集履歴

3

追記

2018/06/07 05:50

投稿

sazi
sazi

スコア25138

test CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  from (
8
8
 
9
- select AAA,CCC,(select count(*) from テーブル where BBB=t1.BBB) cnt
9
+ select AAA,CCC,(select count(*) from テーブル where AAA=t1.AAA and BBB=t1.BBB) cnt
10
10
 
11
11
  from テーブル t1
12
12
 
@@ -26,10 +26,32 @@
26
26
 
27
27
  ```SQL
28
28
 
29
- select AAA,CCC,(select count(*) from テーブル where BBB=t1.BBB) cnt
29
+ select AAA,CCC,(select count(*) from テーブル where AAA=t1.AAA and BBB=t1.BBB) cnt
30
30
 
31
31
  from テーブル t1
32
32
 
33
33
  where CCC is not null
34
34
 
35
35
  ```
36
+
37
+
38
+
39
+ 別解釈として、CCCが有効(Nullでない)なAAAとBBBのパターンの件数を求めるという事だと、
40
+
41
+ ```SQL
42
+
43
+ select AAA,CCC,(select count(*) from テーブル where AAA=V1.AAA and BBB=V1.BBB) cnt
44
+
45
+ from (
46
+
47
+ select AAA,BBB,CCC
48
+
49
+ from テーブル t1
50
+
51
+ where CCC is not null
52
+
53
+ group by AAA,BBB,CCC
54
+
55
+ ) v1
56
+
57
+ ```

2

追記

2018/06/07 05:50

投稿

sazi
sazi

スコア25138

test CHANGED
@@ -17,3 +17,19 @@
17
17
  group by AAA,CCC
18
18
 
19
19
  ```
20
+
21
+ > CCCはどれか一つだけ必ず値あり
22
+
23
+
24
+
25
+ ということなので、以下のようにするだけでも良いかも
26
+
27
+ ```SQL
28
+
29
+ select AAA,CCC,(select count(*) from テーブル where BBB=t1.BBB) cnt
30
+
31
+ from テーブル t1
32
+
33
+ where CCC is not null
34
+
35
+ ```

1

訂正

2018/06/07 05:39

投稿

sazi
sazi

スコア25138

test CHANGED
@@ -1,12 +1,18 @@
1
- 相関副問合せで件数を取得します
1
+ 相関副問合せで件数を取得しておき、それを集計します
2
2
 
3
3
  ```SQL
4
4
 
5
- select AAA,CCC,(select count(*) from テーブル where BBB=t1.BBB)
5
+ select AAA,CCC, SUM(cnt)
6
6
 
7
- from テーブル t1
7
+ from (
8
8
 
9
+ select AAA,CCC,(select count(*) from テーブル where BBB=t1.BBB) cnt
10
+
11
+ from テーブル t1
12
+
9
- where CCC is not null
13
+ where CCC is not null
14
+
15
+ ) iv
10
16
 
11
17
  group by AAA,CCC
12
18