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 中的最后两位数字是月份现在我希望我的输出为

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

可以使用 If else 或 case。

4

3 回答 3

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