我想查看我所有数据库的订单总和,以获取一些见解。现在,我有一个查询正确列出了数据库名称和表。
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.
答案 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;