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

質問編集履歴

3

2021/01/24 09:53追記

2021/01/24 00:54

投稿

katahik
katahik

スコア79

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追記

2021/01/24 00:54

投稿

katahik
katahik

スコア79

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

修正

2021/01/23 21:57

投稿

katahik
katahik

スコア79

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用へ修正したい。