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

回答編集履歴

1

sample

2017/06/06 02:17

投稿

yambejp
yambejp

スコア118073

answer CHANGED
@@ -6,5 +6,47 @@
6
6
  きちんとSQLとして処理するにはランク付け処理をして
7
7
  ランクが6以上のユーザーを抜き出せばよいかと思います。
8
8
 
9
+ # sample
10
+
11
+ ちょっとうまく伝わらないようなので例示します
12
+ 前回SQLはわすれてください
13
+
14
+ 元データ
15
+ ※areaはとりあえず2種としてあります、sexは仮に1=男、2=女とします
16
+ ```SQL
17
+ create table tbl(uid int unique,uname varchar(30),area int,sex tinyint);
18
+ insert into tbl values
19
+ (1,'aaa',1,1),
20
+ (2,'bbb',1,1),
21
+ (3,'ccc',1,2),
22
+ (4,'ddd',1,2),
23
+ (5,'eee',1,2),
24
+ (7,'fff',1,2),
25
+ (8,'ggg',1,1),
26
+ (9,'hhh',1,2),
27
+ (10,'iii',2,1);
28
+ ```
29
+
30
+ 抽出
31
+ ※area=1に対して、idが若い順に女性・男性を交互に3人ずつ表示します
32
+ ```SQL
33
+ select uid,uname,area,sex
34
+ ,(select count(*)+1 from tbl as t2
9
- SELECT area,gender,(SELECT COUNT(*)-1 FROM ・・・) AS RANK
35
+ where t1.area=t2.area and t1.sex=t2.sex and t1.uid>t2.uid
36
+ ) as rank
37
+ from tbl as t1
38
+ where area=1
39
+ having rank<=3
10
- FROM ・・・ HAVING RANK<=6 ORDER BY area,RANK,gender
40
+ order by rank asc,sex desc
41
+
42
+ ```
43
+
44
+ 結果
45
+ |uid|uname|area|sex|rank|
46
+ |--:|:--|--:|--:|--:|
47
+ |3|ccc|1|2|1|
48
+ |1|aaa|1|1|1|
49
+ |4|ddd|1|2|2|
50
+ |2|bbb|1|1|2|
51
+ |5|eee|1|2|3|
52
+ |8|ggg|1|1|3|