質問編集履歴
3
2021/01/24 09:53追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -98,7 +98,7 @@
|
|
98
98
|
```
|
99
99
|
Mysql2::Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SET @rank=0,@before_line_count=0; SELECT CAS' at line 2
|
100
100
|
```
|
101
|
-
## 2021/01/24追記
|
101
|
+
## 2021/01/24 06:57追記
|
102
102
|
別テーブル(itemsテーブル)に対して実験的に下記SQLを試したところ
|
103
103
|
- itemsテーブル
|
104
104
|
|
@@ -145,7 +145,36 @@
|
|
145
145
|
|
146
146
|
どなたか、わかる方がいらっしゃいましたら、ご教授いただければ幸いです。
|
147
147
|
|
148
|
+
## 2021/01/24 09:53追記
|
149
|
+
MySQLバージョン8からRANK()関数が使えるようになっていましたが、エイリアスにrankとすると、キーワード関係でエラーが発生していました。
|
150
|
+
そこで、下記のように修正することで、正しく動作しました。
|
151
|
+
```
|
152
|
+
winners_in_index =
|
153
|
+
"SELECT
|
154
|
+
competition_id,
|
155
|
+
MIN(id) AS id,
|
156
|
+
MIN(image) AS image,
|
157
|
+
MIN(name) AS name,
|
158
|
+
MIN(count) AS count,
|
159
|
+
MIN(rnk) AS rnk
|
160
|
+
FROM
|
161
|
+
(SELECT
|
162
|
+
*,
|
163
|
+
RANK() OVER (PARTITION BY competition_id ORDER BY COUNT DESC) rnk
|
164
|
+
FROM (SELECT
|
165
|
+
items.competition_id,
|
166
|
+
items.id,
|
167
|
+
items.image,
|
168
|
+
items.name,
|
169
|
+
count(*) AS count
|
170
|
+
FROM
|
171
|
+
chosenitems INNER JOIN items ON chosenitems.item_id = items.id
|
172
|
+
GROUP BY items.competition_id,items.id) AS t) AS tt
|
173
|
+
WHERE rnk = 1
|
174
|
+
GROUP BY competition_id;"
|
175
|
+
```
|
148
176
|
|
177
|
+
|
149
178
|
# 環境
|
150
179
|
macOS BigSur
|
151
180
|
ruby 2.7.0
|
2
2021/01/24追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -98,7 +98,54 @@
|
|
98
98
|
```
|
99
99
|
Mysql2::Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SET @rank=0,@before_line_count=0; SELECT CAS' at line 2
|
100
100
|
```
|
101
|
+
## 2021/01/24追記
|
102
|
+
別テーブル(itemsテーブル)に対して実験的に下記SQLを試したところ
|
103
|
+
- itemsテーブル
|
101
104
|
|
105
|
+
|id|name|points|
|
106
|
+
|:--|:--:|--:|
|
107
|
+
|1|a|image1|1|
|
108
|
+
|2|b|image2|1|
|
109
|
+
|2|c|image2|1|
|
110
|
+
|2|d|image2|1|
|
111
|
+
|2|e|image5|2|
|
112
|
+
|3|f|image9|2|
|
113
|
+
|4|g|image4|2|
|
114
|
+
|5|h|image5|2|
|
115
|
+
(続きがあります)
|
116
|
+
```
|
117
|
+
SET @rnk=0,@before_line_points=0; SELECT CASE WHEN @before_line_points = points THEN @rnk ELSE @rnk:=@rnk+1 END AS rnk,name,@before_line_points:=points AS points FROM items ORDER BY points desc;
|
118
|
+
```
|
119
|
+
以下の結果になりました。
|
120
|
+
```
|
121
|
+
Query OK, 0 rows affected (0.00 sec)
|
122
|
+
|
123
|
+
+------+-----------------+--------+
|
124
|
+
| rnk | name | points |
|
125
|
+
+------+-----------------+--------+
|
126
|
+
| 1 | book9 | 99 |
|
127
|
+
| 2 | book10 | 98 |
|
128
|
+
| 3 | color10 | 97 |
|
129
|
+
| 4 | color5 | 96 |
|
130
|
+
| 4 | movie2 | 96 |
|
131
|
+
| 5 | book4 | 94 |
|
132
|
+
| 5 | book3 | 94 |
|
133
|
+
```
|
134
|
+
ここまでは、合っていると推測しました。
|
135
|
+
そこで、このSQLを組みました。
|
136
|
+
```
|
137
|
+
SET @rnk=0,@before_line_count=0; SELECT * FROM (SELECT CASE WHEN @before_line_count = count THEN @rnk ELSE @rnk:=@rnk+1 END AS rnk,*,@before_line_count:=count AS count FROM (SELECT items.competition_id,items.id,items.image,items.name,count(*) AS count FROM chosenitems INNER JOIN items ON chosenitems.item_id = items.id GROUP BY items.competition_id,items.id) AS t ORDER BY count desc) AS tt;
|
138
|
+
```
|
139
|
+
すると、以下のエラーがでました。
|
140
|
+
```
|
141
|
+
Query OK, 0 rows affected (0.00 sec)
|
142
|
+
|
143
|
+
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '*,@before_line_count:=count AS count FROM (SELECT items.competition_id,items.id,' at line 1
|
144
|
+
```
|
145
|
+
|
146
|
+
どなたか、わかる方がいらっしゃいましたら、ご教授いただければ幸いです。
|
147
|
+
|
148
|
+
|
102
149
|
# 環境
|
103
150
|
macOS BigSur
|
104
151
|
ruby 2.7.0
|
1
修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
railsでアプリを作成しております。
|
2
|
-
DBをSQLite3からMySQLへ変更し、SQL文を修正していたところ、SQL文の書き方で詰まってしまったため、ご教授
|
2
|
+
DBをSQLite3からMySQLへ変更し、SQL文を修正していたところ、SQL文の書き方で詰まってしまったため、ご教授いただければ幸いです。
|
3
3
|
|
4
4
|
# 実現したいこと(MySQLで実現したい)
|
5
5
|
SQLite用に記述したもの(下記)をMySQL用へ修正したい。
|