我们可以从postgresql获得totalcount和last记录

时间:2017-05-02 04:53:54

标签: sql postgresql

我正在拥有23条记录的表,我试图在单个查询中获得记录和最后记录的总数。类似的东西

select count(*) ,(m order by createdDate)  from music m ;

有没有什么方法可以将这个记录仅用于PostgreSQL中的最后一次记录和总计数。

3 个答案:

答案 0 :(得分:1)

这可以使用窗口函数

来完成
select *
from (
   select m.*, 
          row_number() over (order by createddate desc) as rn,
          count(*) over () as total_count
   from music
) t
where rn = 1;

另一种选择是使用标量子查询并将其与limit子句结合使用:

select *, 
       (select count(*) from order_test.orders) as total_count
from music
order by createddate desc
limit 1;

根据索引,您的内存配置和表定义可能比两个窗口函数更快。

答案 1 :(得分:0)

不,它不可能做出被要求的事情,sql不会以这种方式运行,第二个你要求计数()sql会将数据级别更改为聚合。做你要求的唯一方法是在一个单独的查询中进行计数()和排序。

答案 2 :(得分:0)

另一种使用窗口函数且没有子查询的解决方案:

SELECT DISTINCT count(*) OVER w, last_value(m) OVER w
FROM music m
WINDOW w AS (ORDER BY date DESC RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING);

这里的要点是last_value适用于由windows定义的分区,而不适用于GROUP BY定义的组。

我没有进行任何测试,但我怀疑我的解决方案在已发布的三个中效果较差。但它到目前为止最接近您的示例查询。