mysql - 我怎样才能更有效、更干净地编写下面的查询?
问题描述
首先,我从两个不同的数据库 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;
解决方案
如果目标是获取信息但不一定是那些列字段名称结果,那么我将使用两个查询:
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 的新值,则查询不会改变。
推荐阅读
- html - 使图像适合具有固定宽度的容器 - 确保 IE11 不会拉伸或扭曲它们
- python - OR-Tools 护士调度 shift_scheduling_sat.py 问题/问题
- c# - 如何从 ExecuteAsync 的代码中取消 dotnet 核心工作进程?
- unit-testing - 带有@Quarkus 注释的测试用例抛出错误(也使用 Intellij idea 插件)
- selenium-chromedriver - 无法使用 findElements()、filter() 或 selectLink() 定位特定的 HTML 元素
- python - 使用一个函数的输出作为另一个函数的输入
- sql - 对于以下场景,如何在 oracle sql 中执行类似 unpivot 的操作?
- python - 如何使用 glob 正确调用当前工作目录的子目录
- azure-devops-migration-tools - AzDo 迁移工具:PBI 到用户故事的迁移不起作用
- android - Frida 没有在私有进程中挂钩函数