在所有数据库中选择列总和

时间:2018-11-02 08:04:23

标签: mysql

我想查看我所有数据库的订单总和,以获取一些见解。现在,我有一个查询正确列出了数据库名称和表。

SELECT table_schema AS database_name, table_name
FROM information_schema.tables
WHERE table_name =  "shopping_carts";

我想要的是某种查询,在该查询中我会做类似的事情。

SELECT table_schema as database_name, SUM(shopping_carts.sub_total)........

如何查询这样的内容?

编辑:我想看的是:

l数据库名称l SUM(列名称)l

| database_name1 |   114728   | ##sum of database_name1.shopping_carts.column_name
| database_name2 |   252154   | ##sum of database_name2.shopping_carts.column_name
| database_name4 |    48156   | ## etc.
| database_name5 |    18448   | ## etc.

1 个答案:

答案 0 :(得分:1)

我建议您使用单个表shopping_charts,在其中添加名为database_name的列。这将使查询更易于编写和维护,并进行适当优化。

虽然不是最佳选择,但您可以通过动态查询解决问题,例如,该查询将返回您必须在每个数据库上执行的选择列表:

select
  concat(
    'select ''', table_schema, ''' AS database_name,'
    'sum(sub_total)',
    ' from ', table_schema, '.shopping_charts'
  )
from
  information_schema.tables
where
  table_name = "shopping_carts"

然后您可以使用group_concat获得单个sql语句:

select group_concat(sql_single_db separator ' union all ') as sql_all_db
from (
  select
    concat(
      'select ''', table_schema, ''' AS database_name,'
      'sum(sub_total)',
      ' from ', table_schema, '.shopping_charts'
    ) sql_single_db
  from
    information_schema.tables
  where
    table_name = "shopping_charts"
) s into @sql_all_db;

您可以执行以下操作:

prepare stmt1 from @sql_all_db;
execute stmt1;
deallocate prepare stmt1;
相关问题