如何使用单个查询获取存储在不同变量中的多个表行的计数?
Posted
技术标签:
【中文标题】如何使用单个查询获取存储在不同变量中的多个表行的计数?【英文标题】:How can I get the count of multiple table rows storing in different variables using single query? 【发布时间】:2017-11-08 15:49:52 【问题描述】:我有 4 个不同的表,我想获取每个表的计数行并获取 4 个不同变量的计数(*)。
我使用的查询是:
SELECT count(*) as count1 FROM `table1`
UNION ALL
SELECT count(*) as count2 FROM `table2`
UNION ALL
SELECT count(*) as count3 FROM `table3`
UNION ALL
SELECT count(*) as count4 FROM `table4`
查询为我提供了每行的计数,但所有值都存储在同一个变量名中。
[
"count1": 16171
,
"count1": 5928
,
"count1": 33318
,
"count1": 5877
]
有什么办法可以得到输出;
[
"count1": 16171
,
"count2": 5928
,
"count3": 33318
,
"count4": 5877
]
提前致谢。
【问题讨论】:
SELECT count(*), 'count1' FROM
table1`` 等
感谢为我工作。
查询效率如何?是否有任何替代查询可用于提高 Big Query 中的查询效率。
我想不出更好的了。
【参考方案1】:
UNION ALL
联合行。听起来您只想列出选择列表中的每个计数。试试这个:
SELECT
(SELECT COUNT(*) FROM `table1`) AS count1,
(SELECT COUNT(*) FROM `table2`) AS count2,
(SELECT COUNT(*) FROM `table3`) AS count3,
(SELECT COUNT(*) FROM `table4`) AS count4
;
【讨论】:
【参考方案2】:以下是 BigQuery 标准 SQL
#standardSQL
SELECT
table_id,
row_count
FROM `yourProject.yourDataset.__TABLES__`
WHERE table_id in ('table1', 'table2', 'table3', 'table4')
这种方法让您(免费!!)获得的不仅仅是行数 - 请参阅下面的示例
#standardSQL
SELECT table_id,
DATE(TIMESTAMP_MILLIS(creation_time)) AS creation_date,
DATE(TIMESTAMP_MILLIS(last_modified_time)) AS last_modified_date,
row_count,
size_bytes,
CASE
WHEN type = 1 THEN 'table'
WHEN type = 2 THEN 'view'
WHEN type = 3 THEN 'external'
ELSE '?'
END AS type,
TIMESTAMP_MILLIS(creation_time) AS creation_time,
TIMESTAMP_MILLIS(last_modified_time) AS last_modified_time,
dataset_id,
project_id
FROM `bigquery-public-data.baseball.__TABLES__`
【讨论】:
以上是关于如何使用单个查询获取存储在不同变量中的多个表行的计数?的主要内容,如果未能解决你的问题,请参考以下文章