首页 > 解决方案 > 我怎样才能更有效、更干净地编写下面的查询?

问题描述

首先,我从两个不同的数据库 db1 和 db2 中进行选择。从每个数据库。在 db1 上,我根据该列中的数据从一列的条件计算结果。同样适用于 db2。

    SELECT 
    (SELECT COUNT(*) FROM db1.table1) AS Column1,
    (SELECT COUNT(*) FROM db1.table1 where  
                          table1.X ='a') AS Column2,
    (SELECT COUNT(*) FROM db1.table1 where  
                         table1.X = 'b') AS Column3,
    (SELECT COUNT(*) FROM db1.table1 where 
                         table1.X = 'c') AS Column4,
    (SELECT COUNT(*) FROM db1.table1 where 
                          table1.X = 'd') AS Column5,
    (SELECT COUNT(*) FROM db1.table1 where
                          table1.X = 'e') AS Column6,
    (SELECT COUNT(*) FROM db2.table2 where
                          table2.Y = 'f') AS Column7,
    (SELECT COUNT(*) FROM db2.table2 where
                          table2.Y = 'g') AS Column8,
    (SELECT COUNT(*) FROM db2.table2 where
                          table2.Y = 'h') AS Column9,
    (SELECT COUNT(*) FROM db2.table2 where
                          table2.Y = 'i') AS Column10;

标签: mysql

解决方案


如果目标是获取信息但不一定是那些列字段名称结果,那么我将使用两个查询:

SELECT `X`,count(*) as `c` FROM `table1` GROUP BY `X` WITH ROLLUP;
SELECT `Y`,count(*) as `c` FROM `table2` GROUP BY `Y` WITH ROLLUP;

您需要遍历每个查询的结果。除最后一行外,每一行都有一个标识符(X 或 Y)和一个计数(c)。最后一行的标识符和计数的总数为 NULL(命名可能因您用于查询的语言而异 - PHP、Python 等)。

这还有一个好处是,如果您添加要计算的 X 或 Y 的新值,则查询不会改变。


推荐阅读