如何使用单个查询获取存储在不同变量中的多个表行的计数?

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__`

【讨论】:

以上是关于如何使用单个查询获取存储在不同变量中的多个表行的计数?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PHP 中向表行添加多个类? [关闭]

获取单个变量中的多个值并使用它与另一个变量中的单个值进行比较

如何在Oracle中将表行拆分为固定大小的块

使用 jquery 在引导程序中获取选定表行的值

在单个查询中选择两个特定的 mysql 表行

如何分离从表行中获取的值并将其存储在雪花中的数组中