使用if else或case的MySQL Query输出..?

时间:2012-05-02 10:24:59

标签: mysql

我有一张桌子

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。

3 个答案:

答案 0 :(得分:2)

您可以使用modular arithmetic获取后两位数字(当数字除以100时它们是余数),然后假设您希望在数据“按”分组时求和money “月:

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

或者,您可以使用依赖MySQL的implicit type conversion并使用其字符串函数:

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; 

HOWEVER 我会注意到通常通常不会在数据库中执行此操作,因为它实际上属于表示层:来自您正在访问的任何语言数据库,如果结果集中没有相应的记录,您将循环遍历1...12并假设TOTAL0

答案 1 :(得分: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 |
+------+-------+

答案 2 :(得分:0)

您可以使用IF语句 - 是的。 看看这个: http://dev.mysql.com/doc/refman/5.5/en/if-statement.html

相关问题