回答編集履歴

3

追記

2017/11/25 02:49

投稿

sazi
sazi

スコア25173

test CHANGED
@@ -71,3 +71,5 @@
71
71
 
72
72
 
73
73
  上記をaの項目でgroup by すると count(*)は2となる
74
+
75
+ ※group by するときは、group by の無い状態で確認すると分かり易いですよ。

2

追記

2017/11/25 02:49

投稿

sazi
sazi

スコア25173

test CHANGED
@@ -14,11 +14,11 @@
14
14
 
15
15
 
16
16
 
17
- 多分、以下のような記述ではないでしょうか
17
+ 多分、以下のような記述ではないでしょうか(joinは直積で表現)
18
18
 
19
19
  ```SQL
20
20
 
21
- select a.bang,a.nama,a.tosi,count(*) from tb1 as a join tb1 as b where a.tosi <= b.tosi group by a.bang,a.nama,a.tosi;
21
+ select a.bang,a.nama,a.tosi,count(*) from tb1 as a , tb1 as b where a.tosi <= b.tosi group by a.bang,a.nama,a.tosi;
22
22
 
23
23
  ```
24
24
 
@@ -31,3 +31,43 @@
31
31
  にはならないですね。
32
32
 
33
33
  表示するのは```a.tosi```ですから、それ以上のというのは35と45の2件です。
34
+
35
+
36
+
37
+ コメントに対しての説明で追記
38
+
39
+ ---
40
+
41
+ (bang,nama)=(A105,西沢)の例で説明します。
42
+
43
+ where条件が無いとき
44
+
45
+ |a.bang | a.nama| a.tosi|b.bang | b.nama| b.tosi|
46
+
47
+ |:--|:--:|--:|:--|:--:|--:|
48
+
49
+ | A105 | 西沢| 35 | A101 | 佐藤 | 40 |
50
+
51
+ | A105 | 西沢| 35 | A102 | 高橋 | 28 |
52
+
53
+ | A105 | 西沢| 35 | A103 | 中川 | 20 |
54
+
55
+ | A105 | 西沢| 35 | A104 | 渡辺 | 23 |
56
+
57
+ | A105 | 西沢| 35 | A105 | 西沢 | 35 |
58
+
59
+
60
+
61
+ where条件 a.tosi <= b.tosi のとき
62
+
63
+ |a.bang | a.nama| a.tosi|b.bang | b.nama| b.tosi|
64
+
65
+ |:--|:--:|--:|:--|:--:|--:|
66
+
67
+ | A105 | 西沢| 35 | A101 | 佐藤 | 40 |
68
+
69
+ | A105 | 西沢| 35 | A105 | 西沢 | 35 |
70
+
71
+
72
+
73
+ 上記をaの項目でgroup by すると count(*)は2となる

1

訂正

2017/11/25 02:37

投稿

sazi
sazi

スコア25173

test CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  ```
8
8
 
9
- group by 句を指定したときには、select する項目はgroup byで指定されなければなりません。
9
+ group by 句を指定したには、select する項目はgroup byで指定されなければなりません。
10
10
 
11
11
  select で指定している ```a.nama,a.tosi```がgroup byで指定されていないからエラーなのです。
12
12
 
@@ -24,7 +24,7 @@
24
24
 
25
25
  > tb1でtosiの大きいものからの順位をつけるのが目的です。
26
26
 
27
- >西沢の例ですと、となるのでa.tosi <= b.tosiだとcountは4
27
+ 西沢の例ですと、となるのでa.tosi <= b.tosiだとcountは4
28
28
 
29
29
 
30
30