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

質問編集履歴

1

誤りの修正

2020/05/10 07:24

投稿

aruto
aruto

スコア177

title CHANGED
File without changes
body CHANGED
@@ -1,18 +1,20 @@
1
1
  ### 前提・実現したいこと
2
- [SQL] 特定のカラムごとにまとめて最大値を持つ行を抜き出したい
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|20|田中|
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