0

私はこのテーブルを持っています:

+------------+-----------+--------+-------+------------+
|  username  | exam_code | module | value | percentage |
+------------+-----------+--------+-------+------------+
|    aaaaa   |     x     |    1   |   60  |      -     |
|    aaaaa   |     x     |    2   |   80  |      -     |
|    aaaaa   |     x     |    3   |   70  |      -     |
|    bbbbb   |     x     |    1   |   60  |      -     |
|    bbbbb   |     x     |    2   |   70  |      -     |
|    bbbbb   |     x     |    3   |   90  |      -     |
+------------+-----------+--------+-------+------------+

モジュールの割合を(php POSTで)自分自身を入力したい。
たとえば、module 1 = 50%module 2 = 35%module 3 = 15%
(合計は 100 になります)

前のテーブルは次のようになります。

+------------+-----------+--------+-------+------------+
|  username  | exam_code | module | value | percentage |
+------------+-----------+--------+-------+------------+
|    aaaaa   |     x     |    1   |   60  |     50     |
|    aaaaa   |     x     |    2   |   80  |     35     |
|    aaaaa   |     x     |    3   |   70  |     15     |
|    bbbbb   |     x     |    1   |   70  |     50     |
|    bbbbb   |     x     |    2   |   70  |     35     |
|    bbbbb   |     x     |    3   |   90  |     15     |
+------------+-----------+--------+-------+------------+

この行まで、PHPでこれを行うことができます

私が聞きたいのは、このテーブルを(パーセンテージフィールドを入力した後)これに変換する方法です

+------------+----------+----------+----------+
|  username  | module 1 | module 2 | module 3 |
+------------+----------+----------+----------+
|    aaaaa   |     30   |    28    |   10.5   |
|    bbbbb   |     35   |    24.5  |   13.5   |
+------------+----------+----------+----------+

(説明)

+------------+----------+----------+----------+
|  username  | module 1 | module 2 | module 3 |
+------------+----------+----------+----------+
|    aaaaa   | (60x50%) | (80x35%) | (70x15%) |
|    bbbbb   | (70x50%) | (70x35%) | (90x15%) |
+------------+----------+----------+----------+

SELECTMySQL構文を使用するだけで、このテーブルを取得する(テーブルを作成しない)方法は?

4

1 に答える 1

4

このような何かがそれを行う必要があります。

SELECT username, 
  SUM(CASE WHEN module = 1 THEN value*percentage/100 END) as module1,
  SUM(CASE WHEN module = 2 THEN value*percentage/100 END) as module2,
  SUM(CASE WHEN module = 3 THEN value*percentage/100 END) as module3
FROM tablename
GROUP BY username

SQL フィドル リンク

于 2013-07-24T23:43:47.383 に答える