mysql に英単語などを記録してアプリを作成しています。
使い勝手を良くするためにデータベースに対する命令(クエリ)を作成するのですが、面倒なのでいつも chatGPT に依頼しています。
でも、いつも質問するのも面倒なので、代表的なものをいくつか記録しておきたいと思います。
英単語データベースに grade を付けていますが、その grade ごとに集計します。
SELECT grade, COUNT(*) AS countFROM wordlistsGROUP BY gradeORDER BY count DESC;
現在、単語テストのテーブルには単語そのものを記録していません。 vocabulary_id として記録しています。
なので、2 つのテーブルを結合してカウントします。
SELECT wl.word,wl.grade, COUNT(*) AS incorrect_countFROM word_tests wtJOIN wordlists wl ON wt.vocabulary_id = wl.idWHERE wt.evaluation != '○'GROUP BY wl.wordORDER BY incorrect_count DESC;
B1 でも全然憶えられない単語がいっぱいあります。数字は間違った回数です。
正解するまでトライすればいいんですが、何らかの引っ掛かりがないと簡単には憶えられません。
UPDATE tokensJOIN STEP.wordlists ON tokens.lemma COLLATE utf8mb4_unicode_520_ci = wordlists.word COLLATE utf8mb4_unicode_520_ciSET tokens.grade = wordlists.grade;
英単語のボキャブラリーを増やすために laravel でアプリを作っています。
正解を出せなかった問題を集計します。
SELECT wl.word, wt.evaluation, counts.test_countFROM wordlists wlJOIN word_tests wt ON wl.id = wt.vocabulary_idJOIN ( SELECT vocabulary_id, MAX(id) AS latest_test_id FROM word_tests GROUP BY vocabulary_id) latest ON wt.id = latest.latest_test_idJOIN ( SELECT vocabulary_id, COUNT(*) AS test_count FROM word_tests GROUP BY vocabulary_id) counts ON wl.id = counts.vocabulary_idWHERE wl.grade = 'B2' AND wt.evaluation != '○'ORDER BY counts.test_count ASC;
JOIN の部分がわかりにくいですが、サブクエリの結果を latest という名前の仮想テーブル として扱います。
JOIN ( SELECT vocabulary_id, MAX(id) AS latest_test_id FROM word_tests GROUP BY vocabulary_id) latest
word_tests から各単語ごとの最新テストIDを計算するサブクエリです。
JOIN ( SELECT vocabulary_id, COUNT(*) AS test_count FROM word_tests GROUP BY vocabulary_id) counts
各単語のテスト回数を集計した仮想テーブルを作っています。