回答編集履歴

1

sample

2017/06/06 02:17

投稿

yambejp
yambejp

スコア114843

test CHANGED
@@ -14,6 +14,92 @@
14
14
 
15
15
 
16
16
 
17
- SELECT area,gender,(SELECT COUNT(*)-1 FROM ・・・) AS RANK
17
+ # sample
18
18
 
19
+
20
+
21
+ ちょっとうまく伝わらないようなので例示します
22
+
23
+ 前回SQLはわすれてください
24
+
25
+
26
+
27
+ 元データ
28
+
29
+ ※areaはとりあえず2種としてあります、sexは仮に1=男、2=女とします
30
+
31
+ ```SQL
32
+
33
+ create table tbl(uid int unique,uname varchar(30),area int,sex tinyint);
34
+
35
+ insert into tbl values
36
+
37
+ (1,'aaa',1,1),
38
+
39
+ (2,'bbb',1,1),
40
+
41
+ (3,'ccc',1,2),
42
+
43
+ (4,'ddd',1,2),
44
+
45
+ (5,'eee',1,2),
46
+
47
+ (7,'fff',1,2),
48
+
49
+ (8,'ggg',1,1),
50
+
51
+ (9,'hhh',1,2),
52
+
53
+ (10,'iii',2,1);
54
+
55
+ ```
56
+
57
+
58
+
59
+ 抽出
60
+
61
+ ※area=1に対して、idが若い順に女性・男性を交互に3人ずつ表示します
62
+
63
+ ```SQL
64
+
65
+ select uid,uname,area,sex
66
+
67
+ ,(select count(*)+1 from tbl as t2
68
+
19
- FROM ・・・ HAVING RANK<=6 ORDER BY area,RANK,gender
69
+ where t1.area=t2.area and t1.sex=t2.sex and t1.uid>t2.uid
70
+
71
+ ) as rank
72
+
73
+ from tbl as t1
74
+
75
+ where area=1
76
+
77
+ having rank<=3
78
+
79
+ order by rank asc,sex desc
80
+
81
+
82
+
83
+ ```
84
+
85
+
86
+
87
+ 結果
88
+
89
+ |uid|uname|area|sex|rank|
90
+
91
+ |--:|:--|--:|--:|--:|
92
+
93
+ |3|ccc|1|2|1|
94
+
95
+ |1|aaa|1|1|1|
96
+
97
+ |4|ddd|1|2|2|
98
+
99
+ |2|bbb|1|1|2|
100
+
101
+ |5|eee|1|2|3|
102
+
103
+ |8|ggg|1|1|3|
104
+
105
+