首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >返回行总数和选定(聚合)数据

返回行总数和选定(聚合)数据
EN

Database Administration用户
提问于 2014-12-04 15:42:27
回答 3查看 27.4K关注 0票数 6

我有一个函数,它从一个表中选择一些数据。我想返回选定的数据和该表中的行总数。

我怎样才能做到这一点,或者如何以最有效的方式获得同样的结果?

我尝试了一些东西,最后得到了下面的代码,现在这是我想要的格式,但是count(*) over () as total_count将一直返回1,我需要它返回的是records选择的行总数。

代码语言:javascript
复制
SELECT 
row_to_json(selected_records) as data
FROM
(   
    SELECT
    count(*) over () as total_count,
    array_to_json(array_agg(row_to_json(records))) as data
    FROM (
        SELECT
            sum(entrances) as entrances
        FROM report_la
        WHERE profile_id = 3777614
        GROUP BY landing_path_id
        limit 10 offset 0
    ) records
) as selected_records

更新后,下面的代码将产生我想要的结果,如果我可以将total_count列隐藏在records选择中,那就太好了。

代码语言:javascript
复制
SELECT 
row_to_json(selected_records) as data
FROM
(   
    SELECT
    min(total_count) as total_count
    ,array_to_json(array_agg(row_to_json(records))) as data
    FROM (
        SELECT
            sum(entrances) as entrances
            ,count(*) over () as total_count
        FROM ga.report_la
        WHERE ga_profile_id = 3777614
        GROUP BY landing_path_id
        limit 10
    ) records
) as selected_records
EN

回答 3

Database Administration用户

发布于 2014-12-04 16:22:04

您可以按照a_horse_with_no_name或ForguesR的建议来做(我相信带有_name的_ more _with_name的建议比ForguesR更有效)。但是,这将在结果集中给出一个额外的列--这可能是您希望的,也可能不是您想要的。这在某种程度上取决于您是否希望获得额外的列(所有列都显示相同的重复数据),或者是否希望在结果集中有类似于“汇总行”的行。

如果您对结果的“汇总行”类型感兴趣,我的回答将说明。

另一个选项是有一个查询,为您提供要查找的COUNT(*),然后将其与原始查询进行UNION。当然,这方面的诀窍是确保两个查询中都有相同数量的列,并确保COUNT(*)查询最后结束。为了做到这一点,我增加了一个列,用来按..。请参阅下面的简单示例。

代码语言:javascript
复制
-- assume col1, col2 are VARCHAR and col3, col4 are NUMERIC
SELECT
  col1, col2, col3, col4
FROM (
  SELECT
    col1, col2, col3, col4, 1 AS sorter
  FROM tab1
  UNION
  SELECT
    NULL::VARCHAR AS col1, NULL::VARCHAR AS col2, NULL::NUMERIC AS col3, COUNT(*) AS col4, 2 AS sorter
  FROM tab1
) a
ORDER BY a.sorter, a.col1, a.col2;
票数 2
EN

Database Administration用户

发布于 2014-12-04 16:04:45

只需包含一个子查询,以获取表中所有行的计数。类似于:

代码语言:javascript
复制
SELECT *, (SELECT COUNT(*) FROM yourTable) AS TotalNbRows FROM yourTable
票数 1
EN

Database Administration用户

发布于 2018-09-26 06:49:24

将聚合查询放入子查询中。

代码语言:javascript
复制
SELECT COUNT( * ) 
  FROM (
  SELECT COUNT( * ) AS  `count` 
  FROM lms
  WHERE `lead_school_type` =3
  AND subscription.vad =1
  GROUP BY lms.user_id
) AS subcount
票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/84322

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档