質問編集履歴
1
誤りの修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,18 +1,20 @@
|
|
1
1
|
### 前提・実現したいこと
|
2
|
-
|
2
|
+
特定のカラムごとにまとめて最大値を持つ行を抜き出したい
|
3
3
|
こういうときの良いSQLの書き方を教えてほしいです。
|
4
4
|
|
5
5
|
### 該当のソースコード
|
6
6
|
以下のようなデータで、クラスごとに最大点をとった人の
|
7
|
-
クラス、点数、名前を抜き出したいです
|
7
|
+
クラス、点数、名前を抜き出したいです。
|
8
|
+
同率一位がいた場合は全員抜き出したいです。
|
8
9
|
|
9
10
|
対象のデータ
|
10
11
|
studentテーブル
|
11
12
|
|class|point|name|
|
12
13
|
|:--|:--:|--:|
|
13
14
|
|A|30|佐藤|
|
15
|
+
|A|60|安田|
|
14
16
|
|A|60|鈴木|
|
15
|
-
|B|
|
17
|
+
|B|60|田中|
|
16
18
|
|B|80|高橋|
|
17
19
|
|C|30|山田|
|
18
20
|
|C|50|伊藤|
|
@@ -21,12 +23,14 @@
|
|
21
23
|
取り出したい形
|
22
24
|
|class|point|name|
|
23
25
|
|:--|:--:|--:|
|
26
|
+
|A|60|安田|
|
24
27
|
|A |60| 鈴木
|
25
28
|
|B |80| 高橋
|
26
29
|
|C |50| 伊藤
|
27
30
|
|
28
31
|
|
29
|
-
以下のような副問合せで取り出せて
|
32
|
+
以下のような副問合せで取り出せそうだと思いましたが、これだとあるクラスの最高点と同じ他の人も抜き出してしまっていました。
|
33
|
+
(この例だとAの最高点(60)と同じBの田中も抜き出してしまっていました)
|
30
34
|
```SQL
|
31
35
|
SELECT
|
32
36
|
s1.class,
|
@@ -44,7 +48,8 @@
|
|
44
48
|
```
|
45
49
|
|
46
50
|
### 質問したいこと
|
51
|
+
上記の取り出し方ができるSQLを知りたいです。
|
47
|
-
取り出したいデータに対してSQLが複雑な気がするのですが、もっと簡潔な書き方はありますでしょうか。
|
52
|
+
また取り出したいデータに対してSQLが複雑な気がするのですが、もっと簡潔な書き方はありますでしょうか。
|
48
53
|
window関数とかを使えばもっと簡潔にかけそうな気がするのですがよくわかっておりません。
|
49
54
|
例えば以下のような考え方ではできないのでしょうか。
|
50
55
|
```SQL
|