回答編集履歴

2

追記

2017/10/18 05:39

投稿

yambejp
yambejp

スコア114777

test CHANGED
@@ -57,3 +57,43 @@
57
57
  ```
58
58
 
59
59
  これにtbl_bがどうからんでくるのかいまいちわかりません
60
+
61
+
62
+
63
+ # 追記2
64
+
65
+ tbl_aのcate_idがユニークではないので、1つだけランク抜き出すことは無理
66
+
67
+ ランクの羅列がほしいのでしょうか?
68
+
69
+
70
+
71
+ ```SQL
72
+
73
+ create table tbl_a(id int unique key,val int,cate_id int);
74
+
75
+ insert into tbl_a values(1,100,1),(2,200,1),(3,300,2),(4,50,2);
76
+
77
+
78
+
79
+ create table tbl_b(id int unique key,name varchar(10), type varchar(10));
80
+
81
+ insert into tbl_b values(1,"janken","win_rate"),(2,"quiz", "win_count");
82
+
83
+ ```
84
+
85
+ これに対して、name = 'janken' and type = 'win_rate'を元にランク計算
86
+
87
+ ```SQL
88
+
89
+ select (select count(*)+1 from tbl_a as t2 where t2.val>t1.val) as rank
90
+
91
+ from tbl_a as t1
92
+
93
+ where cate_id in (select id from tbl_b where name = 'janken' and type = 'win_rate')
94
+
95
+ ```
96
+
97
+ ※select id,(・・・) as rank
98
+
99
+ として、id毎のランクをとってもいい

1

sample

2017/10/18 05:39

投稿

yambejp
yambejp

スコア114777

test CHANGED
@@ -31,3 +31,29 @@
31
31
  具体的なサンプルをつけて、「このサンプルからこういった結果を抽出したい」という
32
32
 
33
33
  書き方をしないといつまでたっても結論はでないと思いますよ
34
+
35
+
36
+
37
+ # 追記
38
+
39
+ tbl_aのsampleです。
40
+
41
+
42
+
43
+ ```sql
44
+
45
+ create table tbl_a(id int unique key,val int);
46
+
47
+ insert into tbl_a values(1,100),(2,200),(3,300),(4,50);
48
+
49
+
50
+
51
+ select (select count(*)+1 from tbl_a as t2 where t2.val>t1.val) as rank
52
+
53
+ from tbl_a as t1 where id=1;
54
+
55
+ /* id=1は結果:3位 */
56
+
57
+ ```
58
+
59
+ これにtbl_bがどうからんでくるのかいまいちわかりません