【问题标题】:Do count(*) for each table which comes as output of another select对作为另一个选择的输出的每个表执行 count(*)
【发布时间】:2021-01-13 10:42:47
【问题描述】:

我想使用select 的输出作为另一个的输入。

选择 1 - select table_name from tables; - 这将提供 15 个表格。

选择 2 - 我想为每个表做一个计数行 count (*)

我尝试做select count(*) from (select table_name from tables) as derived_table;,但我得到 1 行,值为 15(这是表数)。如何计算每张桌子的数量?

【问题讨论】:

    标签: sql vertica


    【解决方案1】:

    SQL 生成 SQL。第一个 SELECT 的“报告”是最后运行的脚本。 使用“vsql”,Vertica 的默认 SQL 客户端(从 my.vertica.com 免费下载)...

    --tuples only
    \t
    -- unaligned output
    \a
    -- pipe the output through yet another vsql session
    \o |vsql
    SELECT
      CASE ROW_NUMBER() OVER(ORDER BY table_name)
        WHEN 1 THEN ''
        ELSE 'UNION ALL '
      END
    ||'SELECT '||QUOTE_LITERAL(table_name)||'AS tbname,COUNT(*) AS rowcount FROM '||table_name
    FROM tables 
    WHERE table_schema='public'
    ;
    
    # test run:
    $ vsql -f countpublic.sql
    Showing only tuples.
    Output format is unaligned.
         tbname      | rowcount
    -----------------+----------
     KOMM            |        8
     canary          |        6
     canary_v        |      666
     certificates    |        6
     change_stream   |        6
     conc            |  1503511
     conc_ext        |  1503511
     d_oppty_scd     |        8
     d_product       |        4
     date_dim        |    73049
    (10 rows)
    

    【讨论】:

      【解决方案2】:

      SELECT SCHEMA_NAME(schema_id) AS [SchemaName],
      [Tables].name AS [TableName],
      SUM([Partitions].[rows]) AS [TotalRowCount]
      FROM sys.tables AS [Tables]
      JOIN sys.partitions AS [Partitions]
      ON [Tables].[object_id] = [Partitions].[object_id]
      AND [Partitions].index_id IN ( 0, 1 )
      -- WHERE [Tables].name = N'name of the table'
      GROUP BY SCHEMA_NAME(schema_id), [Tables].name;

      【讨论】:

      • 这是 SQL Server;似乎是关于 Vertica,不过......
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-05
      • 1970-01-01
      • 1970-01-01
      • 2017-02-23
      相关资源
      最近更新 更多