質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

3回答

3699閲覧

【SQLite】複数カラムのデータをまとめて対象としてソートする。

hiroaki

総合スコア11

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2014/12/26 12:02

SQLiteで例えば

| 名前 | 国語の点数 | 数学の点数 | 社会の点数 | 理科の点数 | 英語の点数 |

のようなテーブルがあったとします。

このようなテーブルで、全ての教科のうち60点以下の教科が多い人順にならべるには
どのようにすればいいのでしょうか。

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答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

hello-world

総合スコア1342

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hiroaki

2014/12/27 16:24

ありがとうございます!無事できました!!
guest

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

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

SQL 文の例なら、以下を参照してみてください。

... ソートする対象のカラムは複数指定できます ...

activerecord を使っているなら、以下を参照してみてください。

...
2つのカラムを指定して並び替える
User.order('name DESC, email')

SELECT "users".* FROM "users" ORDER BY name DESC, email

...

投稿2014/12/26 16:22

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

katoy

2014/12/27 14:22

質問は マルチキーでのソートではなく、  ** 全ての教科のうち60点以下の教科が多い人順にならべる ** といことだったのですね、勘違いしてました。すいません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問