sql - 将表名作为参数传递给多个 SELECT
问题描述
我有一个 SQL 查询,它按照以下方式汇总表table_name
(BigQuery 控制台)的列:
选择
(SELECT COUNT(*) FROM `table_name` WHERE A_col = 'Hello') /
(SELECT COUNT(*) FROM `table_name`) * 100 AS A_something,
(SELECT COUNT(*) FROM `table_name` WHERE B_col IS NULL) /
(SELECT COUNT(*) FROM `table_name`) * 100 AS B_something
怎么可能table_name
在 SQL 查询中只指定一个位置,所以在所有每列 SELECT 中它是一个参数?例如:
(SELECT COUNT(*) FROM m WHERE B_col IS NULL) /
(SELECT COUNT(*) FROM m) * 100 AS B_something
解决方案
我只会使用条件聚合:
select avg(case when a_col = 'Hello' then 100.0 else 0 end) as a_something,
avg(case when b_col is null then 100.0 else 0 end) as b_something
from m
如果要多次使用此表达式,请使用 CTE:
with params as (
select avg(case when a_col = 'Hello' then 100.0 else 0 end) as a_something,
avg(case when b_col is null then 100.0 else 0 end) as b_something
from m
)
select . . .
from params cross join
. . .
推荐阅读
- xslt - XSLT - 对 XML 元素的子集进行排序,同时将未排序的元素保留在其位置
- python - 从具有基于其他数据框列的多索引的数据框中选择行
- python - Python Multiprocessing:如何正确设置 max_workers 的数量?
- python - 使用 keras 进行 RNN 时如何分配种子编号?
- javascript - React - 动画数组中的第一个新元素
- material-ui - 输入组件没有接受道具?
- regex - 我如何从每一行中提取一些特定的单词?
- python - python中从文件到字符串utf-8的字符串
- rollup - rollupjs 避免使用多个文件的重复功能
- ruby-on-rails - Heroku [remote denied] master -> master (pre-receive hook denied) 疑难解答