如何在mysql中汇总列?

时间:2015-07-08 07:48:52

标签: mysql

当使用连接运行一些查询时,我得到这样的表。问题是该表的列和行基于主表动态变化。所以我不能决定列和行。

    Select
    ..
    ..
    (20GP+20HD+20RF+30FR+30HD+30GP+30GP+40HD+40FR+40RF) as total
    from 
    tablename

如果我使用上面的查询,那么我每次都需要编辑查询,而不是上面的查询,请有人告诉我如何执行此操作。

现在我需要对此表中的每一列求和,并且必须在单独的列Total

中显示
------------------------------------------------------..etc..,-----
location|20GP|20HD|20RF|30FR|30HD|30GP|30GP|40HD|40FR|..etc..,40RF|
------------------------------------------------------..etc..,-----
   UAE  |  0 |  1 |  1 |  0 |  0 |  0 |  0 |  1 |  0 |..etc..,  1 |
   USA  |  2 |  3 |  0 |  0 |  1 |  0 |  1 |  0 |  0 |..etc..,  0 |
    .......,
    .......,
    ........etc,

   IND  |  0 |  0 |  0 | 2 |  0 |  0 |  1 |  0 |  1 | ..etc.., 1 | 
------------------------------------------------------..etc..,----

刚出现在预期输出

之下
-----------------------------------------------------------------
location|20GP|20HD|20RF|30FR|30HD|30GP|30GP|40HD|40FR|40RF|total
-----------------------------------------------------------------
   UAE  |  0 |  1 |  1 |  0 |  0 |  0 |  0 |  1 |  0 |  1 |  4
   USA  |  2 |  3 |  0 |  0 |  1 |  0 |  1 |  0 |  0 |  0 |  7
    .......,
    .......,
    ........etc,

   IND  |  0 |  0 |  0 | 2 |  0 |  0 |  1 |  0 |  1 |  1 |   5
-----------------------------------------------------------------

请有人告诉你如何做到这一点

1 个答案:

答案 0 :(得分:-1)

嘿尝试跟踪查询以获取列列表并从中准备查询字符串并通过准备语句执行该字符串。您只需在正则表达式中验证列名称模式。

(SELECT CONCAT('SELECT ', group_concat(`COLUMN_NAME` SEPARATOR '+'), ' as total FROM Test2') INTO @sql
FROM  `INFORMATION_SCHEMA`.`COLUMNS` 
WHERE `TABLE_SCHEMA` = (select database()) 
AND   `TABLE_NAME`   = 'Test2'
AND   `COLUMN_NAME` REGEXP '^[0-9]');

PREPARE stmt1 FROM @sql;
Execute stmt1;