0

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

mysql> select * FROM testa;
+---------+-------+
| month_x | money |
+---------+-------+
| 11101   | 12345 |
| 11105   |   100 |
| 11105   |   100 |
| 11105   |   100 |
| 11105   |   100 |
| 11106   | 12345 |
+---------+-------+
6 rows in set (0.00 sec)

ここで、month_xの最後の2桁は月であり、出力は次のようになります。

Month   TOTAL
01  12345
02  0
03  0
04  0
05  400
06  12345
07  0
08  0
09  0
10  0
11  0
12  0

Ifelseまたはcaseを使用して可能です。

4

3 に答える 3

2

モジュラー演算を使用して、末尾の2桁(数値を100で割ったときの余り)をmoney取得し、データが月で「グループ化」されたときに合計したいとします。

SELECT month_x % 100 AS Month, SUM(money) AS TOTAL
FROM testa
GROUP BY Month
ORDER BY Month ASC;

または、MySQLの暗黙的な型変換に依存して、その文字列関数を使用することもできます。

SELECT RIGHT(month_x, 2) AS Month, SUM(money) AS TOTAL
FROM testa
GROUP BY Month
ORDER BY Month ASC;

アップデート

@ shiplu.mokadd.imが述べているように、毎月(データがない場合でも)表示するには、一時テーブルから1から12までの数字を取得する必要があります。ただし、次を使用してクエリでこのような一時テーブルを作成できますUNION

      SELECT 1
UNION SELECT 2
UNION SELECT 3 -- etc

したがって:

SELECT Month, Sum(money) AS TOTAL
FROM   testa
  RIGHT JOIN (
        SELECT  1 AS Month
  UNION SELECT  2 UNION SELECT  3 UNION SELECT  4 UNION SELECT  5 UNION SELECT  6
  UNION SELECT  7 UNION SELECT  8 UNION SELECT  9 UNION SELECT 10 UNION SELECT 11
  UNION SELECT 12
  ) months ON testa.month_x % 100 = months.Month
GROUP BY Month; 

ただし、データベースは実際にはプレゼンテーション層に属しているため、通常はデータベースでこれを実行しないことに注意してください。データベースにアクセスしている言語に関係なく、ループして、対応するレコードがないかどうか1...12を想定TOTALします。0結果セットで。

于 2012-05-02T10:33:29.690 に答える
1

このためには、最初に月の数値を含むテーブルを作成する必要があります。

CREATE TABLE `months` (
  `mon` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
INSERT INTO `months` VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10), (11), (12);

次に、このクエリを実行します。

SELECT m.mon, 
       IF(Sum(t.money) IS NULL, 0, Sum(t.money)) AS `money` 
FROM   testa t 
       RIGHT OUTER JOIN months m 
         ON ( t.month_x%100 = m.mon ) 
GROUP  BY m.mon; 

結果は、

+------+-------+
| mon  | money |
+------+-------+
|    1 | 12345 |
|    2 |     0 |
|    3 |     0 |
|    4 |     0 |
|    5 |   400 |
|    6 | 12345 |
|    7 |     0 |
|    8 |     0 |
|    9 |     0 |
|   10 |     0 |
|   11 |     0 |
|   12 |     0 |
+------+-------+
于 2012-05-02T11:09:26.370 に答える
0

IFステートメントを使用できます-はい。@これを見てください:http: //dev.mysql.com/doc/refman/5.5/en/if-statement.html

于 2012-05-02T10:30:16.863 に答える