SQLiteで例えば
| 名前 | 国語の点数 | 数学の点数 | 社会の点数 | 理科の点数 | 英語の点数 |
のようなテーブルがあったとします。
このようなテーブルで、全ての教科のうち60点以下の教科が多い人順にならべるには
どのようにすればいいのでしょうか。
よろしくお願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
ベストアンサー
全ての教科のうち60点以下の教科が多い人順
→ 61点以上が少ない順
→ 61点以上を1、60点以下を0にマッピングして、その合計の少ない順
なのでたぶんこんな感じのコードを書く必要があると思います。
lang
1SELECT * FROM テスト結果 2ORDER BY 3 ( CAST(国語の点数 / 61 AS INT) 4 + CAST(数学の点数 / 61 AS INT) 5 + CAST(社会の点数 / 61 AS INT) 6 + CAST(理科の点数 / 61 AS INT) 7 + CAST(英語の点数 / 61 AS INT) 8 ) ASC;
こんな感じでどうでしょう
投稿2014/12/27 11:44
総合スコア1342
0
hello-world さんの回答をベースに SQL を作成、実装してみました。
(tanni として 61 点以上の科目数、sum に 全教科の合計を設定するようにして、
tanni は 昇順、sum は降順でソートしました。
落とした単位数が同じ場合は、合計点数が少ないほうが順位が上になります)
$ sqlite3 teratail.sqlite3 SQLite version 3.8.5 2014-08-15 22:37:57 Enter ".help" for usage hints. sqlite> .dump PRAGMA foreign_keys=OFF; BEGIN TRANSACTION; CREATE TABLE `siken` ( `id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE, `name` INTEGER NOT NULL, `kokugo` INTEGER, `suugaku` INTEGER, `rika` INTEGER, `syakai` INTEGER, `eigo` INTEGER ); INSERT INTO "siken" VALUES(1,'生徒001',90,70,80,90,90); INSERT INTO "siken" VALUES(2,'生徒002',50,70,70,70,70); INSERT INTO "siken" VALUES(3,'生徒003',50,50,70,70,70); INSERT INTO "siken" VALUES(4,'生徒004',50,50,50,70,70); INSERT INTO "siken" VALUES(5,'生徒005',50,50,50,50,70); INSERT INTO "siken" VALUES(6,'生徒006',50,50,50,50,50); DELETE FROM sqlite_sequence; INSERT INTO "sqlite_sequence" VALUES('siken',6); COMMIT; sqlite> SELECT COUNT(*) FROM (select id, name, ...> ( CAST(kokugo / 61 AS INT) ...> + CAST(suugaku / 61 AS INT) ...> + CAST(rika / 61 AS INT) ...> + CAST(syakai / 61 AS INT) ...> + CAST(eigo / 61 AS INT) ...> ) AS tanni, ...> (kokugo + suugaku + rika + syakai + eigo) AS sum from siken order by tanni, sum DESC); 6 sqlite> select id, name, ...> ( CAST(kokugo / 61 AS INT) ...> + CAST(suugaku / 61 AS INT) ...> + CAST(rika / 61 AS INT) ...> + CAST(syakai / 61 AS INT) ...> + CAST(eigo / 61 AS INT) ...> ) AS tanni, ...> (kokugo + suugaku + rika + syakai + eigo) AS sum from siken order by tanni, sum DESC; 6|生徒006|0|250 5|生徒005|1|270 4|生徒004|2|290 3|生徒003|3|310 2|生徒002|4|330 1|生徒001|5|420
投稿2014/12/27 22:43
総合スコア22324
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
SQL 文の例なら、以下を参照してみてください。
- 取得したデータをカラムの値でソート http://www.dbonline.jp/sqlite/select/index2.html
... ソートする対象のカラムは複数指定できます ...
activerecord を使っているなら、以下を参照してみてください。
- Railsドキュメント order http://railsdoc.com/references/order
...
2つのカラムを指定して並び替える
User.order('name DESC, email')SELECT "users".* FROM "users" ORDER BY name DESC, email
...
投稿2014/12/26 16:22
総合スコア22324
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2014/12/27 16:24