回答編集履歴

1

追記

2017/10/13 00:41

投稿

yambejp
yambejp

スコア114839

test CHANGED
@@ -1,3 +1,111 @@
1
1
  group by 処理の場合、理論上「count(*)が0以下に集計される」ことはないので
2
2
 
3
3
  命題自体が達成できません
4
+
5
+
6
+
7
+ # 追記
8
+
9
+
10
+
11
+ 一応サンプル付けておきます
12
+
13
+ count(*) が0以下にならないのを理解しないことには先に進まないかと
14
+
15
+
16
+
17
+ ```SQL
18
+
19
+ create table tbl(col1 varchar(10),col2 varchar(10),col3 int);
20
+
21
+ insert into tbl values
22
+
23
+ ('A','X',10),
24
+
25
+ ('A','X',15),
26
+
27
+ ('A','X',12),
28
+
29
+ ('A','Y',20),
30
+
31
+ ('B','Y',35),
32
+
33
+ ('C','X',10),
34
+
35
+ ('C','X',11),
36
+
37
+ ('C','Z',8);
38
+
39
+ ```
40
+
41
+
42
+
43
+ 単純に集計
44
+
45
+ ```SQL
46
+
47
+ select col1,col2,count(*) as count
48
+
49
+ from tbl group by col1,col2
50
+
51
+ order by col1 asc,col2 asc;
52
+
53
+ ```
54
+
55
+ |col1|col2|count|
56
+
57
+ |:--|:--|--:|
58
+
59
+ |A|X|3|
60
+
61
+ |A|Y|1|
62
+
63
+ |B|Y|1|
64
+
65
+ |C|X|2|
66
+
67
+ |C|Z|1|
68
+
69
+
70
+
71
+ ## JOINして集計
72
+
73
+
74
+
75
+ ```SQL
76
+
77
+ select t3.col1,t3.col2,coalesce(count,'NG') as count
78
+
79
+ from (select distinct t1.col1,t2.col2 from tbl as t1,tbl as t2) as t3
80
+
81
+ left join (select col1,col2,count(*) as count from tbl group by col1,col2) as t4
82
+
83
+ on t3.col1=t4.col1 and t3.col2=t4.col2
84
+
85
+ order by col1 asc,col2 asc;
86
+
87
+ ```
88
+
89
+
90
+
91
+ |col1|col2|count|
92
+
93
+ |:--|:--|--:|
94
+
95
+ |A|X|3|
96
+
97
+ |A|Y|1|
98
+
99
+ |A|Z|NG|
100
+
101
+ |B|X|NG|
102
+
103
+ |B|Y|1|
104
+
105
+ |B|Z|NG|
106
+
107
+ |C|X|2|
108
+
109
+ |C|Y|NG|
110
+
111
+ |C|Z|1|